C#中发送消息SendMessage中参数问题
场景如下:
将系统中的日志在启动画面中显示,如是想到用消息机制。
首先定义消息,这个不表。
然后是引用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; } }
用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 );
[解决办法]
同进程可以这样:
[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);}
[解决办法]