发送信息 通过sendmessag发送信息。并传递一个字符串。 能够收到信息 但收到的结构中的字符串为空??源代码:
  发送方:
       private static readonly int CUSTOM_MESSAGE = 0X400 + 2;
      //api声明 
       [DllImport("user32.dll")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(
        IntPtr hWnd,        // 信息发住的窗口的句柄
        int Msg,            // 消息ID
        int wParam,         // 参数1
        ref messagstring lParam // 参数2   [MarshalAs(UnmanagedType.LPTStr)]StringBuilder lParam
        );
      发送代码:
        IntPtr hwnd_win;
            hwnd_win = FindWindow(null, "reseviceform");  //找到要发送的窗体
            string strtext = "aaa";
            messagstring ms;
            ms.lpData = strtext;
            SendMessage(hwnd_win, CUSTOM_MESSAGE, 0, ref ms);   
接收方:     protected override void WndProc(ref Message m)
        {
            if (m.Msg == CUSTOM_MESSAGE)
            {
                messagstring ms=new messagstring () ;
                Type mytype = ms.GetType();
                ms = (messagstring)m.GetLParam(mytype);               textBox1.Text =Convert.ToString ( ms.lpData);
            }             
            base.WndProc(ref m);
        }发送的数据结构
        namespace copyMessage
  { 
    //要发信息数据结构,作为SendMessage函数的LParam参数
    public struct messagstring
    {
        [MarshalAs(UnmanagedType.LPStr)]
        public string lpData;       //要发送的信息
    }
   }

解决方案 »

  1.   

    应该是没有找到窗口句柄   
                IntPtr hwnd_win;
                hwnd_win = FindWindow(null, "reseviceform");  //找到要发送的窗体
                if (hwnd_win.ToInt32() == null)
                {
                    string strtext = "aaa";
                    messagstring ms;
                    ms.lpData = strtext;
                    SendMessage(hwnd_win, CUSTOM_MESSAGE, 0, ref ms);
                    // 可以使用当前窗口测试
                    //SendMessage(this.Handle,CUSTOM_MESSAGE 0, ref ms);
                }
                else
                {
                    MessageBox.Show("找不到窗口");
                }
      

  2.   


    [DllImport("user32.dll")]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            [DllImport("User32.dll", EntryPoint = "SendMessage")]
            private static extern int SendMessage(
            IntPtr hWnd,        // 信息发住的窗口的句柄
            int Msg,            // 消息ID
            int wParam,         // 参数1
            StringBuilder lParam
            );
    用这样的声明可以吗?
      

  3.   

    如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据
    http://www.chenjiliang.com/Article/View.aspx?ArticleID=2277&TypeID=84关于C#中实现两个应用程序消息通讯的问题
    http://www.chenjiliang.com/Article/View.aspx?ArticleID=3495&TypeID=79
      

  4.   

      
    接受方。
          const int WM_COPYDATA = 0x004A;   
            protected override void DefWndProc(ref   System.Windows.Forms.Message m)
            {
                switch (m.Msg)
                {
                    case WM_COPYDATA:
                        COPYDATASTRUCT mystr = new COPYDATASTRUCT();
                        Type mytype = mystr.GetType();
                        mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
                        
                        break;
                    default:
                        base.DefWndProc(ref   m);
                        break;            }        }        const int WM_COPYDATA = 0x004A;        [DllImport("User32.dll", EntryPoint = "SendMessage")]
            private static extern int SendMessage(
            IntPtr hWnd,   //   handle   to   destination   window   
            int Msg,   //   message   
            int wParam,   //   first   message   parameter   
            ref   COPYDATASTRUCT lParam   //   second   message   parameter   
            );
            const int WM_COPYDATA = 0x004A;
          public struct COPYDATASTRUCT
            {
                public IntPtr dwData;
                public int cbData;
                [MarshalAs(UnmanagedType.LPStr)]
                public string lpData;
            }发送..
            const int WM_CHAR = 0x0102;
                IntPtr hwnd_win;
                IntPtr hwnd_textbox;            hwnd_win = FindWindow(null, "Form4");
                
               
                const int BM_CLICK = 0x00F5;
                COPYDATASTRUCT cds;
                cds.dwData = (IntPtr)100;
                cds.lpData = "Test Message";
                cds.cbData = 14;            //Message msg = Message.Create(hwnd_textbox, BM_CLICK, new IntPtr(0), new IntPtr(0));
                //// PostMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam);
                ////SendMessage(hwnd_textbox, BM_CLICK, 0, ref cds);
                SendMessage(hwnd_win, WM_COPYDATA, 0, ref cds);
      

  5.   

            [DllImport("user32.dll")]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);        [DllImport("user32.dll")]
            public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
            public static extern IntPtr PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
    可以收到。。正确信息...