场景如下:
将系统中的日志在启动画面中显示,如是想到用消息机制。
首先定义消息,这个不表。
然后是引用windowsApp:        [DllImport("User32.dll", EntryPoint = "SendMessageA")]
        private static extern int SendMessage(
             int hWnd, // handle to destination window 
             int Msg, // message 
             int wParam, // first message parameter 
             string lParam // second message parameter 
            );
        private static extern int FindWindow(string lpClassName, string lpWindowName);        public static void SendMsgToFlashForm(int MSG, IntPtr wParam, string lParam)
        {
            int WINDOW_HANDLER = FindWindow(null, @"XXXX");
            if (WINDOW_HANDLER == 0)
            {
                throw new Exception("Could not find Main window!");
            }
            SendMessage(WINDOW_HANDLER, MSG, wParam, lParam);
        }
调用地方: MessageController.SendMsgToFlashForm(MessageManager.MyMessage.WM_SHOW_PROCESS, IntPtr.Zero, "系统开始创建核心对象");
接收的地方:            try
            {
                switch (m.Msg)
                {
                    case Utility.CommonUtility.MessageManager.MyMessage.WM_SHOW_PROCESS:
                        {
                            label2.Text = m.LParam.ToString();
                            break;
                        }
                    default:
                        base.DefWndProc(ref m);//调用基类函数处理非自定义消息。
                        break;
                }
            }现在问题是:
在接收的地方,总是收不到正确的东西,例如,我应该在这里收到是字符串的内容,结果总是返回一组数字!!为什么?麻烦周末有达人帮解决!!

解决方案 »

  1.   

     
    用StringBuild 
    private static extern int SendMessage(
                 int hWnd, // handle to destination window 
                 int Msg, // message 
                 int wParam, // first message parameter 
                 StringBuild lParam // second message parameter 
                );
      

  2.   

    同进程可以这样:
    [DllImport("User32.dll")]
    private static extern int SendMessage(int hWnd, int Msg, int wParam, string lParam);
    private const int WM_USER = 0x0400;
    private void button1_Click(object sender, EventArgs e)
    {
        SendMessage((int)Handle, WM_USER + 10, 0, "Zswang 路过");
    }protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case WM_USER + 10:
                MessageBox.Show(Marshal.PtrToStringAnsi(m.LParam));
                break;
        }
        base.WndProc(ref m);
    }
    跨进程得用WM_COPYDATA消息
      

  3.   

    非常感谢Zswang,
    好像不止一次帮我解决问题,!