### 函数功能

该函数将256个虚拟键的状态拷贝到指定的缓冲区中。

### 函数原型

BOOL GetKeyboardState（PBYTE IpKeyState）；

### 参数

IpKeyState：指向一个256字节的数组，数组用于接收每个虚拟键的状态。

### 返回值

若函数调用成功，则返回0值。若函数调用不成功，则返回值为0。若要获得更多的错误信息，可以调用GetLastError函数。
备注：应用程序可以调用该函数来检取所有虚拟键的当前状态。当键盘消息被从该线程的消息队列中移去时，虚拟键的状态发生改变。当键盘消息被发送到该线程的消息队列中，或者，当键盘消息被发送到其他线程的消息队列或被从其他线程的消息队列中检取到时，虚拟键的状态不发生改变。（例外：通过AttachThreadlnput连接的线程共享同一键盘状态。）当函数返回时，由lpKeyState参数指向的每一个数组成员中都包含了一个虚拟键的状态数据。若最高位被置为1，则该键处于down状态；否则，该键处于up状态。若最低位被置为1，则该键被触发。当一个键被打开时称之为被触发，如capslock键。若最低位被置为0，该键被关闭且不被触发。一个触发键也键盘上的指示灯（如果有的话）在该键被触发时点亮，在不被触发时灭掉。若要检取单个虚拟键的状态信息，可以调用GetKeyState函数。若要检取任一虚拟键的当前状态，而不管相应的键盘消息足否己从消息队列中检取到，可以使用GetAsyncKevState函数。应用程序可以使用虚拟键码常数VK_SHIFT，VK_CONTROL和VK_MENU作为IpKeyState所指向的数组的下标。这样给出的Shift，Ctrl，Alt键的状态不区分左右键。应用程序也可以使用如下的虚拟键码常数作为以上键的区分左右键的下标：
VK_LSHIFT，VK_RSHIFT，VK_LCONTROL，VK_RCONTROL；VW_LMENU，VW_RMENU仅当应用程序调用GetKeyboardState；SetKeyboardState，GetAsycKeystate，GetKeyState和MapVirtualKey函数时，才可用这些区分左右键的常数。

### 速查

Windows NT：3.1及以上版本；Windows：95及以上版本；Windows CE：不支持；头文件：winuser.h；库文件： USer32.lib。