gpt4 book ai didi

C++ SetWindowsHookEx WH_KEYBOARD_LL 正确设置

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:17 28 4
gpt4 key购买 nike

我正在创建一个控制台应用程序,我想在其中记录按键操作(例如向上箭头)。我创建了一个低级键盘 Hook ,它应该捕获任何线程中的所有按键并调用我的回调函数,但它不起作用。当我按下一个键时,程序会暂停一点,但从不调用回调。我检查了文档,但没有找到任何东西。我不知道是我使用的 SetWindowsHookEx() 不正确(据我所知它成功创建了钩子(Hook))还是我的回调函数不正确!我不确定怎么了!预先感谢您的帮助。

#include "Windows.h"
#include <iostream>
using namespace std;

HHOOK hookHandle;

LRESULT CALLBACK keyHandler(int nCode, WPARAM wParam, LPARAM lParam);

int _tmain(int argc, _TCHAR* argv[]) {

hookHandle = SetWindowsHookEx(WH_KEYBOARD_LL, keyHandler, NULL, 0);

if(hookHandle == NULL) {
cout << "ERROR CREATING HOOK: ";
cout << GetLastError() << endl;
getchar();
return 0;
}

MSG message;

while(GetMessage(&message, NULL, 0, 0) != 0) {
TranslateMessage( &message );
DispatchMessage( &message );
}

cout << "Press any key to quit...";
getchar();

UnhookWindowsHookEx(hookHandle);

return 0;
}


LRESULT CALLBACK keyHandler(int nCode, WPARAM wParam, LPARAM lParam) {
cout << "Hello!" << endl;

// Checks whether params contain action about keystroke
if(nCode == HC_ACTION) {
cout << ((KBDLLHOOKSTRUCT *) lParam)->vkCode << endl;
}

return CallNextHookEx(hookHandle, nCode,
wParam, lParam);
}

最佳答案

您不能阻塞系统调用(getchar),您必须在调用 Hook 之前运行窗口循环并处理消息。

关于C++ SetWindowsHookEx WH_KEYBOARD_LL 正确设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2166581/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com