分享WinCE钩子封装库

在最近的项目中,需要使用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中留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值