[DllImport("user32.dll")]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll")]
        static extern IntPtr GetDlgItem(IntPtr hDlg, int nIDDlgItem);
        [DllImport("user32.dll", SetLastError = true)]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle, int childAfter, string className, int windowTitle);
        [DllImport("user32.dll", EntryPoint = "SendMessage")]
        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, string lParam);
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr GetModuleHandle(string lpModuleName);        IntPtr hwndQQ;
        IntPtr hwnd1;
        IntPtr hwnd2;
        IntPtr hwnd3;
        IntPtr hwnd4;        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(hwnd3, 194, 0, this.textBox1.Text);//向QQ输入框粘贴字符,this.textBox1.Text是要发送的文字信息
                        hwnd4 = GetDlgItem(hwnd1, 1);
                        SendMessage(hwnd4, 245, 0, Convert.ToString(0));
                    }
                }
            }
参考下

解决方案 »

  1.   

    声明
     [DllImport("User32.dll", EntryPoint = "SendMessage")]
            private static extern int SendMessage(
            int hWnd,   //   handle   to   destination   window   
            int Msg,   //   message   
            int wParam,   //   first   message   parameter   
            ref   COPYDATASTRUCT lParam   //   second   message   parameter   
            );
    使用
     SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref   );
    COPYDATASTRUCT 的结构
      public struct COPYDATASTRUCT    //use this struct
            {
                public IntPtr dwData;
                public int cbData;
                [MarshalAs(UnmanagedType.LPStr)]
                public string lpData;
            }
      

  2.   

    获取窗口中一个文本框的值的SendMessage方法:
    [DllImport("user32.dll", EntryPoint = "SendMessageA")]
    static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, StringBuilder lParam);
    const int WM_GETTEXT = 0xd;
    private void button1_Click(object sender, EventArgs e)
    {
        const int buffer_size = 1024;    
        StringBuilder buffer = new StringBuilder(buffer_size);
        SendMessage(this.textBox1.Handle, WM_GETTEXT, buffer_size, buffer);
        MessageBox.Show(buffer.ToString());
    }
      

  3.   

    向textBox发送字符串的例子:
    [DllImport("user32.dll", EntryPoint = "SendMessageA")]
    static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, StringBuilder lParam);
    const int WM_SETTEXT = 0xc;private void button1_Click(object sender, EventArgs e)
    {
        const int buffer_size = 1024;
        StringBuilder buffer = new StringBuilder(buffer_size);
        buffer.Append("aaa");
        SendMessage(this.textBox1.Handle, WM_SETTEXT, buffer_size, buffer);
    }
      

  4.   

    先用FindWindow找出窗口,再用FindWindowEx根据窗口和控件的关系(可以用SPY++查出)找出控件,然后用SendMessage发WM_CHAR消息(258),wParam给字符,lParam给1。
      

  5.   

    http://www.host01.com/article/Net/00020007/0561317385672940.htm
    http://www.builder.com.cn/2007/0907/495420.shtml