在最近的项目中,需要使用WinCE的键盘钩子。具体是勾住WinCE终端的扫描按键。翻出自己以前的旧程序,重新封装了一下。现在分享出来,如果大家的项目中也需要用到键盘钩子或者鼠标钩子,又不想在这上面花费太多时间的话,假如你搜索到了这个帖子,不妨试用一下我封装的这个。
CeHook.dll导出6个函数:
#ifndef _CE_HOOK_H_
#define _CE_HOOK_H_
#define DLLCEHOOK_API __declspec(dllexport)
#define WM_HOOK_MOUSE WM_USER + 101
#define WM_HOOK_KEYDOWN WM_USER + 102
#define WM_HOOK_KEYUP WM_USER + 103
extern "C" DLLCEHOOK_API BOOL HookInit(HWND hwnd);
extern "C" DLLCEHOOK_API BOOL HookDeinit();
extern "C" DLLCEHOOK_API BOOL EnableKeyHook(BYTE vkCodes[], UINT vkNumber);
extern "C" DLLCEHOOK_API BOOL DisableKeyHook();
extern "C" DLLCEHOOK_API BOOL EnableMouseHook();
extern "C" DLLCEHOOK_API BOOL DisableMouseHook();
#endif // _CE_HOOK_H_
在使用钩子之前,先调用HookInit函数进行初始化,参数hwnd是希望接收钩子消息的窗口句柄。
钩子使用完毕之后,调用HookDeinit函数进行资源释放。
EnableKeyHook用来使能键盘钩子。可以通过参数vkCodes传递自己想捕捉的按键的虚拟键值,vkNumber是vcCodes中的虚拟键的数量。
BYTE vkCodes[4] = {VK_APP1, VK_APP4, VK_APP5, VK_APP6};
BOOL returnValue = EnableKeyHook(vkCodes, 4);
调用DisableKeyHook函数停止使用键盘钩子。
EnableMouseHook和DisableMouseHook分别用来使能和禁能鼠标钩子。
头文件中还定义了三个自定义消息值:WM_HOOK_MOUSE、WM_HOOK_KEYDOWN、WM_HOOK_KEYUP。分别代表鼠标消息、按键按下和按键抬起。其中WM_HOOK_KEYDOWN和WM_HOOK_KEYUP的wParam会传回本次按下的按键的虚拟键值。
再简单介绍下MFC Dialog程序,处理自定义消息的方法。
(1)消息处理函数声明:
afx_msg LRESULT OnHookKeyDown(WPARAM wParam, LPARAM lParam);
(2)消息映射:
ON_MESSAGE(WM_HOOK_KEYDOWN, OnHookKeyDown)
(3)消息处理函数实现:
LRESULT CCeHookTestDlg::OnHookKeyDown(WPARAM wParam, LPARAM lParam)
{
DWORD vkCode = (DWORD) wParam;
CString msg;
msg.Format(_T("Virtual Key Code: 0x%04x is down."), vkCode);
MultiThreadMessageBox(msg, _T("CeHook"), MB_OK);
return 0;
}
贴几张我的测试程序的图片,测试平台是Windows Mobile 6.1。
最后,如果大家在自己的项目中需要使用到钩子,之前又没自己封装过。想节省时间直接用现成的,不妨到这里留下邮箱。我会将封装库和测试程序(SDK:WM6.1)发给你。我在钩子程序中加了日志,[email protected],如果不想要这个日志,或者在使用中有什么问题的可以在我的blog下留言。
wince hook
------解决方案--------------------
这个也不是好什么高深技术,你还不如直接公布代码出来。
之前就有人公布了。
------解决方案--------------------
偶在CSDN 的 BLOG 中有CE5.0和6.0的键盘钩子,有源代码可用。
确实不算什么高深的技术,但也不是肤浅的技术。
------解决方案--------------------
支持一下
------解决方案--------------------
直接开源吧,又不是什么高深的东西。
------解决方案--------------------
可以把封装库上传到网站 方便大家使用