WM_KEYDOWN消息

按下非系统键时,使用键盘焦点发布到窗口。 非系统键是未按下 ALT 键时按下的键。

#define WM_KEYDOWN                      0x0100

参数

wParam

非系统密钥的虚拟密钥代码。 请参阅 虚拟密钥代码

lParam

重复计数、扫描代码、扩展键标志、上下文代码、以前的键状态标志和转换状态标志,如下所示。

Bits 含义
0-15 当前消息的重复计数。 该值是由于用户按住键而自动重新执行击键的次数。 如果击键足够长,则会发送多个消息。 但是,重复计数不是累积计数。
16-23 扫描代码。 该值取决于 OEM。
24 指示键是扩展键,例如在增强型 101 或 102 键键盘上显示的右侧 Alt 和 Ctrl 键。 如果它是扩展键,则值为 1;否则为 0。
25-28 保留;不使用。
29 上下文代码。 对于 WM_KEYDOWN 消息,该值始终为 0。
30 上一个键状态。 如果消息发送前键关闭,则值为 1;如果键已启动,则值为 1。
31 转换状态。 对于 WM_KEYDOWN 消息,该值始终为 0。

有关更多详细信息,请参阅 击键消息标志

返回值

如果应用程序处理此消息,则应用程序应返回零。

示例

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;  
}

GitHub上Windows经典示例的示例。

注解

如果按下 F10 键, DefWindowProc 函数将设置内部标志。 当 DefWindowProc 收到 WM_KEYUP 消息时,函数将检查内部标志是否已设置,如果是,请将 WM_SYSCOMMAND 消息发送到顶级窗口。 消息的 WM_SYSCOMMAND 参数设置为SC_KEYMENU。

由于自动重现功能,在发布WM_KEYUP消息之前,可能会发布多个WM_KEYDOWN消息。 可以使用上一个键状态 (位 30) 来确定 WM_KEYDOWN 消息指示第一个向下转换还是重复向下转换。

对于增强型 101 键和 102 键键盘,扩展键是键盘主部分的右 Alt 和 Ctrl 键;数字键盘左侧的 INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和箭头键;和数字键盘中的除号 (/) 和 ENTER 键。 其他键盘可能支持 lParam 参数中的扩展键位。

应用程序必须将 wParam 传递给 TranslateMessage ,而无需更改它。

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winuser.h (包括 Windows.h)

另请参阅

引用

DefWindowProc

TranslateMessage

WM_CHAR

WM_KEYUP

WM_SYSCOMMAND

概念性

键盘输入