sendmessage引发其他错误!(顶又分)
各位老大:我使用sendmessage从一个程序集中发送消息到主程序的窗体。
消息定义:
public static class MyMessage { public const int USER_MESSAGE = 0x0400; public const int WM_OPEN_ATTRIBUTE = USER_MESSAGE + 1; public const int WM_CLOSE_ATTRIBUTE = USER_MESSAGE + 2; }
public static class MessageController { [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage( int hWnd, // handle to destination window int Msg, // message IntPtr wParam, // first message parameter IntPtr lParam // second message parameter ); [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern int FindWindow(string lpClassName, string lpWindowName); public static void SendMsgToMainForm(int MSG, IntPtr wParam, IntPtr lParam) { int WINDOW_HANDLER = FindWindow(null, @"mainform"); if (WINDOW_HANDLER == 0) { throw new Exception("Could not find Main window!"); } SendMessage(WINDOW_HANDLER, MSG, wParam, lParam); } }
MessageController.SendMsgToMainForm(MyMessage.WM_OPEN_ATTRIBUTE, (IntPtr)0, (IntPtr)0);
protected override void DefWndProc(ref System.Windows.Forms.Message m) { switch (m.Msg) { case MyMessage.WM_OPEN_ATTRIBUTE: //处理消息 //... break; case MyMessage.WM_CLOSE_ATTRIBUTE: //... break; default: base.DefWndProc(ref m);//调用基类函数处理非自定义消息。 break; } }
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = "Test Message";
cds.cbData = 14;
SendMessage(hwnd_win, WM_COPYDATA, 0, ref cds);
[解决办法]
接受//
今天上午刚好无聊想做一个wince的sendmessage
可惜wince版本的sdk不支持c++的到时没问题
这个代码是c#写的。
你的sendmessage的参数不对。是0当然受到了,它认为是空,所以能发消息
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;
}
}
[解决办法]
顶把,,,是不是消息常数定义的有问题,被别的占用了