wince 驱动如何发送自定义消息??

nwf1987   2010-2-21 14:45 楼主
我想实现在驱动中发送自定义消息。为什么总是无法接收到,也不知道是否发送。
使用SendMessage()函数。
SendMessage(HWND_BROADCAST,WM_COPYDATA ,(WPARAM)(&g_KeyCode),(LPARAM)(&g_KeyCode));
WM_COPYDATA的响应函数根本记不响应。
难道wince不支持HWND_BROADCAST吗?

回复评论 (12)

LZ要实现什么样的功能?SendMessage送自定义消息不太理解。
点赞  2010-2-21 14:53
我在写键盘驱动。并非标准键盘驱动。
比如我有两个按键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));//发送消息


在应用程序中添加响应函数,但是响应函数不响应。
点赞  2010-2-21 15:19
SendMessage和PostMessage都是可以的,WinCE也支持HWND_BROADCAST,可能是你用法上有问题。

如果是按键,也可以考虑使用模拟按键的方法,如下。
keybd_event(bVk,0,0,0);
keybd_event(bVk,0,KEYEVENTF_KEYUP,0);
这样在应用中响应特定的按键消息就可以了。
点赞  2010-2-21 20:50
不顶不行    sunrain_hjb
点赞  2010-2-22 04:39
引用: 引用 3 楼 sunrain_hjb 的回复:
SendMessage和PostMessage都是可以的,WinCE也支持HWND_BROADCAST,可能是你用法上有问题。

如果是按键,也可以考虑使用模拟按键的方法,如下。
keybd_event(bVk,0,0,0);
keybd_event(bVk,0,KEYEVENTF_KEYUP,0);
这样在应用中响应特定的按键消息就可以了。

我之前用的这种方法,但是总觉得这种方法不妥,因为我的应用中还需要使用软键盘输入。这样在使用软键盘的时候,按下我的物理按键会导致输入异常啊。
点赞  2010-2-22 08:31
可以考虑用事件来实现
点赞  2010-2-22 09:09
引用: 引用 6 楼 domworldjohn 的回复:
可以考虑用事件来实现

你回答问题总是那么精炼。
点赞  2010-2-22 09:29
驱动中SetEvent
应用程序中WaitForSingleObject
跨进程用带名字的Event
我是这么干的
点赞  2010-2-22 10:07
引用: 引用 8 楼 dxw777 的回复:
驱动中SetEvent
应用程序中WaitForSingleObject
跨进程用带名字的Event
我是这么干的

我试试
点赞  2010-2-22 10:25
驱动和应用程序都要用RegisterWindowMessage注册同一个消息。
然后驱动中用SendMessage或者PostMessage向HWND_BROADCAST发送注册到的消息id,这样应用程序就可以接收到。
点赞  2010-2-22 10:38
static  UINT WM_MY_MESSAGE=RegisterWindowMessage(L"Message"); //注册一个自定义消息
我这里注册了啊。
应用程序里也用的同一句话
点赞  2010-2-22 10:55
现在收到了吗?
点赞  2010-4-27 13:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复