WindowsAPI之SetWindowsHookEx()
来源:互联网 发布:.market域名 编辑:程序博客网 时间:2024/06/07 07:04
钩子函数可以用来获取系统的按键消息,进而可以屏蔽某些按键或者按键组合。我们发现WH_KEYBORAD_LL和WH_MOUSE_LL这两个low-level的hook可以被安装成全局的,这我们不妨用这两个low-level的hook替换掉WH_KEYBORAD和WH_MOUSE。
1 首先在xxDlg.h中添加如下代码
#if (_WIN32_WINNT >= 0x0400)#define WH_KEYBOARD_LL 13#define WH_MOUSE_LL 14#define LLKHF_ALTDOWN (KF_ALTDOWN >> 8) #endif // (_WIN32_WINNT >= 0x0400)typedef struct { DWORD vkCode; DWORD scanCode; DWORD flags; DWORD time; DWORD dwExtraInfo;} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
不添加这些代码的话,那么编译器会显示有些变量是没有被定义的
2 然后添加键盘按键处理函数,它是一个回调函数
LRESULT CALLBACK LowLevelKeyboardProc (INT nCode, WPARAM wParam, LPARAM lParam){ // By returning a non-zero value from the hook procedure, the // message does not get passed to the target window KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *)lParam; BOOL bControlKeyDown = 0; switch (nCode) { case HC_ACTION: { // Check to see if the CTRL key is pressed bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);//获取指定按键的状态 //Disable CTRL+ESC //if (bControlKeyDown) // { // AfxMessageBox("control按下"); //} if (pkbhs->vkCode == VK_ESCAPE && bControlKeyDown) return 1; //Disable ALT+TAB if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN) return 1; //Disable ALT+ESC if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags & LLKHF_ALTDOWN) return 1; break; } default: break; } return 1;}
我们要知道pkbhs->vkCode指定的是键盘按键的虚拟键码,而LOBYTE(pkbhs->vkCode)指定的是键盘按键的ascii码
3添加全局键盘钩子函数 一般在OnCreate()函数中添加
int CHOOKEXDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here Hook =(HHOOK)SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)LowLevelKeyboardProc,AfxGetApp()->m_hInstance,0); return 0;}
4添加卸载钩子函数,一般在OnDestory()函数中添加
void CHOOKEXDlg::OnDestroy() { CDialog::OnDestroy(); // TODO: Add your message handler code here if(Hook) { BOOL result = UnhookWindowsHookEx((HHOOK)Hook); // 卸载钩子 if (result) Hook = NULL; }}
0 0
- WindowsAPI之SetWindowsHookEx()
- SetWindowsHookEx 详解(一)
- SetWindowsHookEx 详解(二)
- SetWindowsHookEx 详解(三)
- SetWindowsHookEx详解(1)
- SetWindowsHookEx 详解(二)
- SetWindowsHookEx 详解(三)
- SETWINDOWSHOOKEX
- SetWindowsHookEx
- SetWindowsHookEx
- SetWindowsHookEx
- SetWindowsHookEx
- SetWindowsHookEx
- SetWindowsHookEx
- SetWindowsHookEx
- SetWindowsHookEx
- windowsAPI之键盘输入
- WindowsAPI之按钮
- android中使用EventBus进行消息通知
- hdu 5387 clock (时间夹角的计算)
- Fedora22内核编译说明
- Python基础
- Linux上安装JDK环境变量配置
- WindowsAPI之SetWindowsHookEx()
- rabbitmq 集群功能讲解
- CSS3动画
- A visual analytics framework for spatio-temporal analysis and modelling
- HDU 5090--Game with Pearls【二分图最大匹配】
- *nux平台上的C10M问题
- Ubuntu之Gitlab、Gerrit、Jenkins协调工作配置
- HttpURLConnection请求图片
- 计算机系统(六)OS 管理 硬件