GetAsyncKeyState是一个用来判断函数调用时指定虚拟键的状态,确定用户当前是否按下了键盘上的一个键的函数。如果按下,则返回值最高位为1。
GetAsyncKeyState是一个用来判断函数调用时指定虚拟键的状态,确定用户当前是否按下了键盘上的一个键的函数。如果按下,则返回值最高位为1。
类型:SHORT
自对GetAsyncKeyState函数的上一次调用以来,如键已被按过,则位0设为1;否则设为0。如键处于按下状态,则位15设为1;如抬起,则为0。
微软的win32手册指出:
倘若输入焦点从属于与调用函数的输入线程不同的另一个输入线程,则返回值为0(例如,一旦另一个程序拥有焦点,则它应返回零)。证据显示,函数实际是在整个系统的范围内工作的。
函数名 | 返回值类型 | 备注 |
GetAsyncKeyState | SHORT | 用来判断函数调用时指定虚拟键的状态 |
参数 | 类型 | 说明 |
vKey | int | 欲测试的虚拟键的键码 |
如指定了VK_LBUTTON 或 VK_RBUTTON,按钮的状态就会根据实际的按钮报告——无论是否曾用SwapMouseButton函数对鼠标的位置进行了交换。win32提供了额外的一些虚拟键码,比如VK_LSHIFT 和 VK_RSHIFT,以便在两个完全一样的键中区分出左右(也包括Ctrl 和 Alt)
VB声明
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
C#声明
public static extern short GetAsyncKeyState(int vKey);
Windows API:
GetAsyncKeyState
函数功能:该函数判断在此函数被调用时,某个键是处于UP状态还是处于DOWN状态,及前次调用GetAsyncKeyState函数后,是否按过此键.如果返回值的最高位被置位,那么该键处于DOWN状态;如果最低位被置位,那么在前一次调用此函数后,此键被按过,否则表示该键没被按过.
函数原型:
SHORT GetAsyncKeyState(int nVirtKey);
参数说明:
nVirtKey:指定256个可能的虚拟键盘值中的一个.
注意事项:GetAsyncKeyState只对一个特定的线程可用,此时输入是导向这个线程的.如果在当前其他线程中具有输入焦点,则对GetAsyncKeyState的调用将返回零.
应用程序可以使用虚拟键码常数VK_SHIFT,VK_CONTROL和VK_MENU作为nVirtKey参数的值。它给出shift,ctrl或alt键的值而不区分左右键,应用程序也可以使用如下的虚拟键码常数作nVirtKey的值来区分前述键的左键、右键的情形。
VK_LSHIFT,VK_RSHIFT;VK_LCONTROL,VK_RCONTROL;VK_LMENU,VK_RMENU
仅当应用程序调用GetKeyboardState,SetKeyboardState,GetAsyncKeystate;GetKeyState和MapVirtualKey函数时,才可用这些区分左右键的常数。
C/C++声明
功能:确定用户当前是否按下了键盘上的一个键
常用键的VK值:
VK_SHIFT Shift键
VK_LSHIFT 左Shift键
VK_RSHIFT 右Shift键
VK_ConTROL Ctrl键
VK_LConTROL 左Ctrl键
VK_RConTROL 右Ctril键
VK_MENU Alt键
VK_LMENU 左Alt键
VK_RMENU 右Alt键
VK_LBUTTON 鼠标左键
VK_RBUTTON 鼠标右键
VK_ESCAPE ESC键
VK_RETURN回车键
VK_TABTAB键
VK_SPACE空格键
VK_UP↑键
VK_DOWN↓键
VK_LEFT←键
VK_RIGHT→键
另一个函数GetKeyState与GetAsyncKeyState函数不同。GetAsyncKeyState在按下某键的同时调用,判断正在按下某键。
GetKeyState则在按过某键之后再调用,它返回最近的键盘消息从线程的队列中移出时的键盘状态,判断刚按过了某键。
GetAsyncKeyState 取异步键状态。
比如,一般情况下,你可以在操作系统的控制面板中设置鼠标左右键的映射(实际的鼠标左键可以映射成右键点击事件),或者通过程序也可以这样设置,这样就产生了物理键状态(实际的),逻辑键状态(虚拟的,)。使用 GetKeyState,GetKeyboardState,等函数得到的就是逻辑键状态。
而GetAsyncKeyState 读取的是物理键状态,也是就是不管你怎么鼠标键盘映射,它只读取实际的按键状态。
VB示例
GetAsyncKeyState(vbKeyShift) SHIFT键