使用低级键盘挂钩覆盖WIN + D快捷方式时,开始菜单打开

时间:2019-03-16 12:33:44

标签: c++ windows keyboard-shortcuts

我刚刚开始学习C ++,所以如果我没有遵循最佳实践,请告诉我。我正在尝试编写一个程序,该程序复制 Win + D 的行为,但仅适用于活动监视器上的窗口(使用鼠标的窗口)。

以下代码用于检测WIN + D按键并抑制默认行为,然后调用自定义函数以最小化窗口。到目前为止,我已经设法抓住WIN + D按键。

如果我按以下顺序按键:
WIN(按),D(按),D(释放),WIN(释放)。
然后一切都会按预期进行。

但是,如果我按如下键:
WIN(按),D(按),WIN(释放),D(释放)。
然后开始菜单打开。

我该如何解决?

感谢任何帮助/反馈。

HHOOK keyboardHook;

static bool isWindowsPressed = false;
LRESULT CALLBACK keyboardEventHandler(int code, WPARAM w, LPARAM l){
    int key = ((PKBDLLHOOKSTRUCT) l)->vkCode;

    bool isKeyDownEvent = (w == WM_KEYDOWN || w == WM_SYSKEYDOWN);

    if(key == VK_LWIN || key == VK_RWIN) isWindowsPressed = isKeyDownEvent;

    if(isWindowsPressed && isKeyDownEvent && key == 'D'){
        std::cout << "FIRED" << std::endl;

        //Minimize Windows

        return 1;
    }

    return CallNextHookEx(keyboardHook, code, w, l);
}

int main(){
    //ShowWindow(GetConsoleWindow(), SW_HIDE);

    keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardEventHandler, GetModuleHandle(NULL), 0);

    MSG ms;
    while(1){
        PeekMessage(&ms, 0, 0, 0, 1);
    }

    return 0;
}

0 个答案:

没有答案