Как отменить состояние «системный ключ выключен» в Windows - PullRequest
0 голосов
/ 09 декабря 2008

В Windows, когда вы нажимаете Alt и снова отпускаете его, строка меню активируется. Однако, когда вы нажимаете Alt, затем щелкаете, затем отпускаете, строка меню не активируется, потому что, по-видимому, вы хотели нажать Alt +, а не активировать строку меню.

Я хочу поддержать Alt + изменения колесика мыши (которые будут отображаться с горизонтальной прокруткой). Это работает нормально, но если вы готовы и отпустите клавишу Alt, строка меню активируется. Очевидно, что это не желательно. Должно быть какое-то действие, которое Windows выполняет внутренне, когда вы нажимаете Alt +, чтобы отменить внутренний флаг ActivateMenuBarWhenAltIsReleased. Если я знаю, что это такое, я могу сделать это сам, когда получаю сообщение колесика мыши.

Итак, кто-нибудь знает, как работает система, которая активирует строку меню при нажатии и отпускании Alt, и как отменить это? Спасибо!

Ответы [ 2 ]

2 голосов
/ 09 декабря 2008

Когда вы отпускаете клавишу Alt, система генерирует сообщение WM_SYSCOMMAND / SC_KEYMENU. Более того, если вы не нажмете клавишу, чтобы открыть определенное всплывающее меню, lparam будет 0. DefWindowProc, получив его, войдет в цикл меню. Итак, все, что вам нужно сделать, это обнаружить это сообщение и предотвратить его попадание в DefWindowProc:

LRESULT CALLBACK MainWndProc(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    switch (msg) {
        // ...
        case WM_SYSCOMMAND: {
            DWORD cmd = wparam & 0xfff0;
            // test for Alt release without any letter key pressed
            if (cmd == SC_KEYMENU && lparam == 0) {
                // don't let it reach DefWindowProc
                return 0;
            }
            break;
        }
        // ...
    }

    return DefWindowProc(wnd, msg, wparam, lparam);
}
0 голосов
/ 09 декабря 2008

Я думаю, что эта ссылка (функция keybd_event) поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...