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

时间:2015-05-09 05:55:54

标签: winapi keyboard hotkeys

目标:我想知道用户确实或没有按下我想知道的热键,比如我想知道他/她在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);
}

感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

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

RegisterHotKey

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

SetWindowsHookEx