我想实现在驱动中发送自定义消息。为什么总是无法接收到,也不知道是否发送。
使用SendMessage()函数。
SendMessage(HWND_BROADCAST,WM_COPYDATA ,(WPARAM)(&g_KeyCode),(LPARAM)(&g_KeyCode));
WM_COPYDATA的响应函数根本记不响应。
难道wince不支持HWND_BROADCAST吗?
LZ要实现什么样的功能?SendMessage送自定义消息不太理解。
我在写键盘驱动。并非标准键盘驱动。
比如我有两个按键K1和K2,我希望按下K1触发一个自定义的事件,从而触发应用程序中的事件响应函数,处理键盘要完成的任务。
K2雷同。
static UINT WM_MY_MESSAGE=RegisterWindowMessage(L"Message"); //注册一个自定义消息
……
HWND Wnd = FindWindow(L"Dialog", L"ADC Testing");
g_KeyCode = ReadKeycode();获取键值
SendMessage(Wnd,WM_MY_MESSAGE,(WPARAM)(&g_KeyCode),(LPARAM)(&g_KeyCode));//发送消息
在应用程序中添加响应函数,但是响应函数不响应。
SendMessage和PostMessage都是可以的,WinCE也支持HWND_BROADCAST,可能是你用法上有问题。
如果是按键,也可以考虑使用模拟按键的方法,如下。
keybd_event(bVk,0,0,0);
keybd_event(bVk,0,KEYEVENTF_KEYUP,0);
这样在应用中响应特定的按键消息就可以了。
引用: 引用 3 楼 sunrain_hjb 的回复:
SendMessage和PostMessage都是可以的,WinCE也支持HWND_BROADCAST,可能是你用法上有问题。
如果是按键,也可以考虑使用模拟按键的方法,如下。
keybd_event(bVk,0,0,0);
keybd_event(bVk,0,KEYEVENTF_KEYUP,0);
这样在应用中响应特定的按键消息就可以了。
我之前用的这种方法,但是总觉得这种方法不妥,因为我的应用中还需要使用软键盘输入。这样在使用软键盘的时候,按下我的物理按键会导致输入异常啊。
驱动中SetEvent
应用程序中WaitForSingleObject
跨进程用带名字的Event
我是这么干的
驱动和应用程序都要用RegisterWindowMessage注册同一个消息。
然后驱动中用SendMessage或者PostMessage向HWND_BROADCAST发送注册到的消息id,这样应用程序就可以接收到。
static UINT WM_MY_MESSAGE=RegisterWindowMessage(L"Message"); //注册一个自定义消息
我这里注册了啊。
应用程序里也用的同一句话