我正在制作一个程序,我希望它在我按下 F6 时检测到,然后调用 if 语句。这应该在全局范围内起作用,而不仅仅是在我专注于我的程序时。我该怎么做?
最佳答案
由于您使用的是 Windows,因此可以使用 SetWindowsHookEx
设置键盘 Hook 使用 WH_KEYBOARD
或 WH_KEYBOARD_LL
。然后在匹配的 KeyboardProc 中处理按键或 LowLevelKeyboardProc功能,并过滤掉任何 F6 按键。请务必调用 CallNextHookEx
对于任何非 F6 按键,因为未能调用 CallNextHookEx
将“吃掉”键盘消息。
您需要在 DLL 中执行此操作;您将需要 DLL 的 32 位和 64 位版本,因为 32 位应用只能注入(inject) 32 位 DLL,而 64 位应用只能注入(inject) 64 位 DLL。
你也可以尝试一些基于 RegisterHotKey
的东西.这比 Hook 更安全,尽管如果另一个应用程序调用 RegisterHotKey
并在您调用之前指定 F6,您将无法注册热键。
因为你不想在你的热键上有任何额外的修饰符,调用看起来像这样:
RegisterHotKey(myHwnd, 1, 0, VK_F6);
其中 myHwnd
是您窗口的 HWND(如果您希望在消息循环中处理 WM_HOTKEY
消息,则可以选择 nullptr
) ,1
是热键的标识符,可以是您喜欢的任何 int,0
指定没有修饰键(Ctrl、Alt、Windows 键等),而 VK_F6
是 F6 的虚拟键码。
关于C++ 如何让程序在全局范围内检测我的击键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23327034/