gpt4 book ai didi

c++ - 如何在 Windows 上使用 C++ 监听终端外的击键

转载 作者:行者123 更新时间:2023-12-01 14:57:06 31 4
gpt4 key购买 nike

我是编程新手,目前我正在使用此代码来监听我的击键:

#include <windows.h>
#include <stdio.h>

int main()
{
while (1)
{
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
DWORD NumInputs = 0;
DWORD InputsRead = 0;
bool running = true;

INPUT_RECORD irInput;

GetNumberOfConsoleInputEvents(hInput, &NumInputs);

ReadConsoleInput(hInput, &irInput, 1, &InputsRead);

switch (irInput.Event.KeyEvent.wVirtualKeyCode)
{
case VK_F1:
puts("F1");
break;
case VK_F2:
puts("F2");
break;

case VK_F3:
puts("F3");
break;

case VK_F4:
puts("F4");
break;
}
}
}
但是,即使我的终端没有焦点,我也需要一个事件监听器。那可能吗?

最佳答案

您可以使用 SetWindowsHookExA WH_KEYBOARD_LL .
并为这个钩子(Hook)设置对应的钩子(Hook)函数来对应你需要的键。
这是您可以在没有焦点的情况下聆听键盘的示例:

#include <windows.h>
#include <stdio.h>
HHOOK _k_hook;
LRESULT __stdcall k_Callback1(int nCode, WPARAM wParam, LPARAM lParam)
{
PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lParam;
//a key was pressed
if (wParam == WM_KEYDOWN && nCode == HC_ACTION)
{
switch (key->vkCode)
{
case VK_F1:
puts("F1");
break;
case VK_F2:
puts("F2");
break;

case VK_F3:
puts("F3");
break;

case VK_F4:
puts("F4");
break;
}
}

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


int main()
{
_k_hook = SetWindowsHookExA(WH_KEYBOARD_LL, k_Callback1, NULL, 0);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) != 0)
{

}
if (_k_hook)
UnhookWindowsHookEx(_k_hook);
return TRUE;
}

关于c++ - 如何在 Windows 上使用 C++ 监听终端外的击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63555089/

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