这两天做qq群发的东西,开始研究获得qq窗体的句柄,主要代码如下,不知道问题出在哪啊?各位高手帮帮忙啊:
private void MySendMessage()
        {
            string machinename = System.Environment.MachineName;
            Process[] processlist = Process.GetProcesses(machinename);
            foreach (Process p in processlist)
            {
                if (p.MainWindowTitle != "")
                {
                    if (p.MainWindowTitle.ToString().Substring(0, 1) == "与" || p.MainWindowTitle.ToString().Substring(0, 1) == "临")//查看窗口标题第一个字是否是“与”。如果是的,说明是QQ窗口
                    {
                        hwndQQ = FindWindow("#32770", p.MainWindowTitle.ToString());
                        
                        hwnd1 = GetDlgItem(hwndQQ, 0);
                        hwnd2 = GetDlgItem(hwnd1, 0);
                        hwnd3 = GetDlgItem(hwnd2, 894);
                        SendMessage(hwnd1, 194, 0, this.txtMessage.Text);//向QQ输入框粘贴字符,this.textBox1.Text是要发送的文字信息
                        hwnd4 = GetDlgItem(hwnd1, 1);
                        SendMessage(hwnd4, 245, 0, Convert.ToString(0));
                        Thread.Sleep(100);
                        p.CloseMainWindow();
                    }
                }
            }
        }
得到的hwnd的值都是0,很让我郁闷啊。
后来我又改了一点,可还是不对啊,改过的代码如下:
private void MySendMessage()
        {
            string machinename = System.Environment.MachineName;
            Process[] processlist = Process.GetProcesses(machinename);
            foreach (Process p in processlist)
            {
                if (p.MainWindowTitle != "")
                {
                    if (p.MainWindowTitle.ToString().Substring(0, 1) == "与" || p.MainWindowTitle.ToString().Substring(0, 1) == "临")//查看窗口标题第一个字是否是“与”。如果是的,说明是QQ窗口
                    {
                        hwndQQ = FindWindow("#32770", p.MainWindowTitle.ToString());
                        hwnd1 = GetDlgItem(hwndQQ, 894);//894是我用spy++获得的输入框的id
                        //hwnd2 = GetDlgItem(hwnd1, 0);
                        //hwnd3 = GetDlgItem(hwnd2, 894);
                        SendMessage(hwnd1, 194, 0, this.txtMessage.Text);//向QQ输入框粘贴字符,this.textBox1.Text是要发送的文字信息
                        hwnd4 = GetDlgItem(hwnd1, 1);
                        SendMessage(hwnd4, 245, 0, Convert.ToString(0));
                        Thread.Sleep(100);
                        p.CloseMainWindow();
                    }
                }
            }
        }

解决方案 »

  1.   

    http://www.cnblogs.com/seabreezefreecloud/archive/2007/09/18/897192.html
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 
    http://feiyun0112.cnblogs.com/
      

  2.   

    private void MySendMessage() 
            { 
                string machinename = System.Environment.MachineName; 
                Process[] processlist = Process.GetProcesses(machinename); 
                foreach (Process p in processlist) 
                { 
                    if (p.MainWindowTitle != "") 
                    { 
                        if (p.MainWindowTitle.ToString().Substring(0, 1) == "与" || p.MainWindowTitle.ToString().Substring(0, 1) == "临")//查看窗口标题第一个字是否是“与”。如果是的,说明是QQ窗口 
                        { 
                            hwndQQ = FindWindow("#32770", p.MainWindowTitle.ToString()); 
                            
                            hwnd1 = GetDlgItem(hwndQQ, 0); 
                            hwnd2 = GetDlgItem(hwnd1, 894); 
                            SendMessage(hwnd1, 194, 0, this.txtMessage.Text);//向QQ输入框粘贴字符,this.textBox1.Text是要发送的文字信息 
                            hwnd4 = GetDlgItem(hwnd1, 1); 
                            SendMessage(hwndQQ, 245, 0, Convert.ToString(0)); 
                            Thread.Sleep(100); 
                            p.CloseMainWindow(); 
                        } 
                    } 
                } 
            } 
    这样就行了
    结贴