C#中发送消息SendMessage中参数问题
场景如下:
将系统中的日志在启动画面中显示,如是想到用消息机制。
首先定义消息,这个不表。
然后是引用windowsApp:
- C# code
[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); }
调用地方:
- C# code
MessageController.SendMsgToFlashForm(MessageManager.MyMessage.WM_SHOW_PROCESS, IntPtr.Zero, "系统开始创建核心对象");
接收的地方:
- C# code
try { switch (m.Msg) { case Utility.CommonUtility.MessageManager.MyMessage.WM_SHOW_PROCESS: { label2.Text = m.LParam.ToString(); break; } default: base.DefWndProc(ref m);//调用基类函数处理非自定义消息。 break; } }
现在问题是:
在接收的地方,总是收不到正确的东西,例如,我应该在这里收到是字符串的内容,结果总是返回一组数字!!
为什么?麻烦周末有达人帮解决!!
[解决办法]
mark
[解决办法]
还没用过User32.dll呢!!
[解决办法]
- C# code
用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 );
[解决办法]
同进程可以这样:
- C# code
[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);}
[解决办法]
[解决办法]