Поделиться через


WM_KEYDOWN сообщение

Отображается в окне с фокусом клавиатуры при нажатии несистемной клавиши. Несистемная клавиша — это клавиша, которая нажимается, если клавиша ALT не нажата.

#define WM_KEYDOWN                      0x0100

Параметры

wParam

Код виртуального ключа несистемного ключа. См . раздел Коды виртуальных ключей.

lParam

Счетчик повторов, код сканирования, флаг расширенного ключа, контекстный код, предыдущий флаг "ключ—состояние" и флаг состояния перехода, как показано ниже.

Bits Значение
0—15 Число повторов для текущего сообщения. Значение — это количество автоматических попыток нажатия клавиши в результате того, что пользователь удерживает клавишу. Если нажатие клавиши удерживается достаточно долго, отправляется несколько сообщений. Однако количество повторов не является накопительным.
16—23 Код сканирования. Значение зависит от изготовителя оборудования.
24 Указывает, является ли клавиша расширенной клавишей, например клавишами ALT и CTRL справа, которые отображаются на расширенной клавиатуре с 101 или 102 клавишами. Значение равно 1, если это расширенный ключ; в противном случае — 0.
25-28 Защищены; не использовать.
29 Контекстный код. Значение всегда равно 0 для WM_KEYDOWN сообщения.
30 Предыдущее состояние ключа. Значение равно 1, если ключ не работает перед отправкой сообщения, или равно нулю, если ключ находится вверх.
31 Состояние перехода. Значение всегда равно 0 для WM_KEYDOWN сообщения.

Дополнительные сведения см. в разделе Флаги сообщения нажатия клавиш.

Возвращаемое значение

Приложение должно возвращать ноль, если оно обрабатывает это сообщение.

Пример

LRESULT CALLBACK HostWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) 
    {
    case WM_KEYDOWN:
        if (wParam == VK_ESCAPE)
        {
            if (isFullScreen) 
            {
                GoPartialScreen();
            }
        }
        break;

    // ...
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;  
}

Пример из классических примеров Windows на сайте GitHub.

Комментарии

Если клавиша F10 нажата, функция DefWindowProc устанавливает внутренний флаг. Когда DefWindowProc получает сообщение WM_KEYUP , функция проверяет, установлен ли внутренний флаг, и, если да, отправляет сообщение WM_SYSCOMMAND в окно верхнего уровня. Параметр WM_SYSCOMMAND сообщения имеет значение SC_KEYMENU.

Из-за функции автовосписи до публикации WM_KEYUP сообщения может быть опубликовано несколько WM_KEYDOWN сообщений. Предыдущее состояние ключа (бит 30) можно использовать для определения того, указывает ли сообщение WM_KEYDOWN первый переход вниз или повторный переход вниз.

Для расширенных клавиатур с 101 и 102 клавишами расширенными клавишами являются клавиши ALT и CTRL в разделе main клавиатуры; клавиши INS, DEL, HOME, END, PAGE UP, PAGE DOWN и стрелки в кластерах слева от цифровой клавиатуры, а также клавиши деления (/) и ВВОД на цифровой клавиатуре. Другие клавиатуры могут поддерживать бит расширенной клавиши в параметре lParam .

Приложения должны передавать wParam в TranslateMessage , не изменяя его.

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Winuser.h (включая Windows.h)

См. также раздел