WINAPI 键盘检测其他应用程序热键

Posted

技术标签:

【中文标题】WINAPI 键盘检测其他应用程序热键【英文标题】:WINAPI keyboards detect other application hotkeys 【发布时间】:2015-07-20 02:55:20 【问题描述】:

目标:我想知道用户是否按下了一些我想知道的热键,就像我想知道他/她在 chrome 上按 Ctrl + N

我尝试检测应用程序热键,例如 chrome Ctrl + N 打开新选项卡。

winapi 如何检测到这一点?

我看过一篇文章说WM_KEYUP + WM_KEYDOWN,但是wParam一次可以得到一个WM_KEYUP或者WM_KEYDOWN,如何实现呢?

int main(int argc, char *argv[])

    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProc, hInstance, 0);
    hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, hInstance, 0);
    while (GetMessage(&message,NULL,0,0)) 
        TranslateMessage( &message );
        DispatchMessage( &message );
    
    UnhookWindowsHookEx(hHook);
    UnhookWindowsHookEx(hMouseHook);

KeyBoardHookProc(int nCode, WPARAM wParam, LPARAM lParam)

    KBDLLHOOKSTRUCT cKey = *((KBDLLHOOKSTRUCT*)lParam);
     .................

    if(wParam == WM_KEYUP)
    
        kp.HandlekeyboardInfo(lpszName, buffer);
    

    return CallNextHookEx(hHook, nCode, wParam, lParam);

感谢您的帮助!!

【问题讨论】:

这几乎没有意义。你能退后一步告诉我们你的实际目标吗?我很确定您选择了错误的解决方案。 我想知道用户是否按下了一些我想知道的热键,比如我想知道他/她在 chrome 上按 Ctrl + N RegisterHotKey 与什么有什么关系?这与这里无关。你需要听 CTRL 下降,然后 N 下降。 所以我第一次尝试错误的方式。感谢您给我评论。有什么想法可以让我知道如何听 CTRL 下降然后 N 继续。 只需检测钩子进程中的那些键。 【参考方案1】:

有几种不同的方法可以做到这一点。最简单的可能是在您的应用程序中注册一个热键,并在按下组合键时让 Windows 通知您。

RegisterHotKey

另一种方法是注册一个键盘挂钩。所有按键都将传递给您的应用程序,但您必须确定按下了哪些键。如果你走这条路线,请确保调用 CallNextHookEx()。

SetWindowsHookEx

【讨论】:

现在我用SetWindowsHookEx来做,因为RegisterHotKey会导致原来的热键丢失

以上是关于WINAPI 键盘检测其他应用程序热键的主要内容,如果未能解决你的问题,请参考以下文章

为啥会出现QQ热键冲突?该怎么办?

怎么删除THINKPAD热键驱动?在哪里删除,哪一个是热键的驱动程序

如何检测键盘顶部的单词建议栏是不是显示?

在python中轮询键盘(检测按键)

iOS:如何检测硬件蓝牙键盘上的转义/控制键?

使用delphi多线程实现绑定某个EXE的进程并且向它发送键盘鼠标消息的实例。