分享WinCE钩子封装库

zhuyf87 2013-01-26 07:01:05
在最近的项目中,需要使用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)发给你。我在钩子程序中加了日志,会在根目录下生成一个CeHook@zhuyf.log文件,如果不想要这个日志,或者在使用中有什么问题的可以在我的blog下留言。
...全文
120 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshi_ziyu 2013-01-27
  • 打赏
  • 举报
回复
可以把封装库上传到网站 方便大家使用
zhuyf87 2013-01-27
  • 打赏
  • 举报
回复
另外项目中,暂时没有钩子需要的朋友,也可以绕行。我发此贴,是将来有人项目急,googe到此贴,提供个方便。因为我自己好多问题,都是google到csdn的帖子解决的。-_-
zhuyf87 2013-01-27
  • 打赏
  • 举报
回复
引用 5 楼 slek 的回复:
直接开源吧,又不是什么高深的东西。
-_-,我在2楼已经回复过了。之前也有人发过源码了。想自己写,需要参照源码的,可以搜源码的帖子。 偷懒想直接用的,可以看看这个。只是给“偷懒”的人提供个方便而已。高手们请勿见谅或者绕行吧。呵呵。
西山小月 2013-01-26
  • 打赏
  • 举报
回复
直接开源吧,又不是什么高深的东西。
一介布衣萧萧 2013-01-26
  • 打赏
  • 举报
回复
支持一下
91program 2013-01-26
  • 打赏
  • 举报
回复
偶在CSDN 的 BLOG 中有CE5.0和6.0的键盘钩子,有源代码可用。 确实不算什么高深的技术,但也不是肤浅的技术。
zhuyf87 2013-01-26
  • 打赏
  • 举报
回复
引用 1 楼 accessysq 的回复:
这个也不是好什么高深技术,你还不如直接公布代码出来。 之前就有人公布了。
-_-,确认是很肤浅的技术。呵呵。 只不过为“偷懒”的人提供个方便。 源码是用在公司项目里的,如果直接贴出源码,让同事看到确实不太好。
  • 打赏
  • 举报
回复
这个也不是好什么高深技术,你还不如直接公布代码出来。 之前就有人公布了。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧