GetKeyboardState 函数 (winuser.h)

将 256 个虚拟密钥的状态复制到指定的缓冲区。

语法

BOOL GetKeyboardState(
  [out] PBYTE lpKeyState
);

参数

[out] lpKeyState

类型: PBYTE

接收每个虚拟密钥的状态数据的 256 字节数组。

返回值

类型: BOOL

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

应用程序可以调用此函数来检索所有虚拟密钥的当前状态。 当线程从其消息队列中删除键盘消息时,状态会更改。 当键盘消息发布到线程的消息队列时,状态不会更改,也不会在将键盘消息发布到其他线程的消息队列或从其他线程的消息队列中检索时更改。 (异常:通过 AttachThreadInput 连接的线程共享相同的键盘状态。)

函数返回时, lpKeyState 参数指向的数组的每个成员都包含虚拟密钥的状态数据。 如果高阶位为 1,则键关闭;否则,它已启动。 如果键是切换键(例如 CAPS LOCK),则切换键时低序位为 1;如果取消切换键,则为 0。 对于非切换键,低序位毫无意义。 切换键据说在打开时处于切换状态。 切换键的指示灯 (键盘上的任何) 在切换键时处于打开状态,并在取消切换键时关闭。

若要检索单个密钥的状态信息,请使用 GetKeyState 函数。 若要检索单个键的当前状态,而不考虑是否已从消息队列检索相应的键盘消息,请使用 GetAsyncKeyState 函数。

应用程序可以使用虚拟键代码常量 VK_SHIFTVK_CONTROLVK_MENU 作为 lpKeyState 指向的数组中的索引。 这会提供 SHIFT、Ctrl 或 ALT 键的状态,而不区分左键和右键。 应用程序还可以使用以下虚拟键代码常量作为索引来区分这些键的左实例和右实例:

VK_LSHIFT
VK_RSHIFT
VK_LCONTROL
VK_RCONTROL
VK_LMENU
VK_RMENU
 

这些左右区分常量只能通过 GetKeyboardState、SetKeyboardStateGetAsyncKeyStateGetKeyStateMapVirtualKey 函数对应用程序可用。

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 在 Windows 10 版本 10.0.14393 中引入的 ext-ms-win-ntuser-rawinput-l1-1-0 ()

另请参阅