如何在 Windows 上使用 C++ 监听终端外的击键
Posted
技术标签:
【中文标题】如何在 Windows 上使用 C++ 监听终端外的击键【英文标题】:How to listen for key stroke outside terminal with C++ on Windows 【发布时间】:2020-08-24 05:15:04 【问题描述】:我是编程新手,目前我正在使用此代码来监听我的击键:
#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;
但是,即使我的终端没有焦点,我也需要一个事件监听器。这可能吗?
【问题讨论】:
通过SetWindowsHookEx()
或RegisterRawInputDevices()
使用键盘钩子
根据您的用例,RegisterHotKey 可能是一个解决方案。
【参考方案1】:
您可以将SetWindowsHookExA
与WH_KEYBOARD_LL
一起使用。
并为这个钩子设置对应的钩子函数,对应你需要的键。
这是你可以在没有焦点的情况下听键盘的示例:
#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;
【讨论】:
您好,如果这个答案对您有帮助,请随时标记它以帮助遇到相同问题的人,如果您有任何问题,请告诉我。谢谢。以上是关于如何在 Windows 上使用 C++ 监听终端外的击键的主要内容,如果未能解决你的问题,请参考以下文章