Меню «Пуск» открывается при переопределении сочетания клавиш WIN + D с использованием низкоуровневой клавиатуры - PullRequest
0 голосов
/ 16 марта 2019

Я только начал изучать 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;
}
...