ToB企服应用市场:ToB评测及商务社交产业平台
标题:
12.1 使用键盘鼠标监控钩子
[打印本页]
作者:
刘俊凯
时间:
2023-10-15 18:05
标题:
12.1 使用键盘鼠标监控钩子
本节将介绍如何使用Windows API中的SetWindowsHookEx和RegisterHotKey函数来实现键盘鼠标的监控。这些函数可以用来设置全局钩子,通过对特定热键挂钩实现监控的效果,两者的区别在于SetWindowsHookEx函数可以对所有线程进行监控,包括其他进程中的线程,而RegisterHotKey函数只能对当前线程进行监控。
首先我们来实现注册热键功能,注册热键可以使用RegisterHotKey()函数,该函数可以将一个热键与当前应用程序或线程绑定,使得当用户按下热键时,系统会自动将该热键的消息发送到该应用程序或线程中,该函数原型如下;
BOOL RegisterHotKey(
HWND hWnd,
int id,
UINT fsModifiers,
UINT vk
);
复制代码
其中,参数的含义如下:
hWnd:热键所属的窗口句柄,通常设置为NULL,表示与当前线程绑定
id:热键的ID号,用于区分不同的热键
fsModifiers:热键的修饰键,可以使用组合键,例如Ctrl、Alt、Shift等
vk:热键的虚拟键码,例如VK_F1表示F1键VK_LEFT表示左箭头键等
函数需要传入一个窗口句柄、热键ID、热键组合键等参数来设置热键。当热键被按下时,系统会自动将一个WM_HOTKEY消息发送给注册了该热键的窗口,应用程序需要重载该窗口的消息处理函数来响应该事件,从而实现相应的响应操作。该函数会返回一个BOOL类型的值,表示热键设置是否成功。
当热键被注册后则就需要接收热键消息,通常可以使用GetMessage函数,该函数用于从消息队列中获取一个消息并将其存储在一个结构体中,通常用于在一个循环中不断地获取消息,从而实现对Windows消息的处理。
该函数的原型定义如下所示;
BOOL GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
);
复制代码
其中,参数的含义如下:
lpMsg:指向MSG结构体的指针,用于存储获取到的消息
hWnd:消息接收者的窗口句柄,通常设置为NULL,表示接收所有窗口的消息
wMsgFilterMin:指定获取消息的最小消息值,通常设置为0
wMsgFilterMax:指定获取消息的最大消息值,通常设置为0
GetMessage函数需要传入一个指向MSG结构体的指针,该结构体包含了消息的各种信息,例如消息的类型、发送者、接收者、时间戳等等。读者只需要通过判断函数内的WM_HOTKEY消息,并监控是否为我们所需要的即可,如下代码是一段注册热键的实现,分别注册了Ctrl+F1, Ctrl+F2, Ctrl+F3三个热键组;
[code]#include #include using namespace std;int main(int argc, char* argv[]){ // 分别注册三个热键 Ctrl+F1 , Ctrl+F2 , Ctrl+F3 if (0 == RegisterHotKey(NULL, 1, MOD_CONTROL, VK_F1)) { cout
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4