GetAsyncKeyState是一個用來判斷函式調用時指定虛擬鍵的狀態,確定用戶當前是否按下了鍵盤上的一個鍵的函式。如果按下,則返回值最高位為1。
基本介紹
- 中文名:GetAsyncKeyState
- 屬性 :函式
- 作用:判斷函式調用時指定虛擬鍵的狀態
- 相關:測試的虛擬鍵的鍵碼
說明,參數表,VB聲明,C#聲明,C/C++聲明,
說明
返回值 SHORT,
自對GetAsyncKeyState函式的上一次調用以來,如鍵已被按過,則位0設為1;否則設為0。如鍵目前處於按下狀態,則位15設為1;如抬起,則為0。
微軟的win32手冊指出:
參數表
函式名 | 返回值類型 | 備註 |
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#聲明
[DllImport("User32")] 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 讀取的是物理鍵狀態,也是就是不管你怎么滑鼠鍵盤映射,它唯讀取實際的按鍵狀態。
比如,一般情況下,你可以在作業系統的控制臺中設定滑鼠左右鍵的映射(實際的滑鼠左鍵可以映射成右鍵點擊事件),或者通過程式也可以這樣設定,這樣就產生了物理鍵狀態(實際的),邏輯鍵狀態(虛擬的,)。使用 GetKeyState,GetKeyboardState,等函式得到的就是邏輯鍵狀態。
而GetAsyncKeyState 讀取的是物理鍵狀態,也是就是不管你怎么滑鼠鍵盤映射,它唯讀取實際的按鍵狀態。