GetAsyncKeyState 函式 (winuser.h)
判斷呼叫函式時,鍵是否向上或關閉,以及先前呼叫 GetAsyncKeyState之後是否按下按鍵。
語法
SHORT GetAsyncKeyState(
[in] int vKey
);
參數
[in] vKey
類型: int
虛擬金鑰程式碼。 如需詳細資訊,請參閱 虛擬金鑰碼。
您可以使用左和右辨別常數來指定特定索引鍵。 如需詳細資訊,請參閱一節。
傳回值
類型: SHORT
如果函式成功,傳回值會指定自 上次呼叫 GetAsyncKeyState之後是否按下按鍵,以及按鍵目前是否為向上或向下。 如果設定了最顯著位,則按鍵會關閉,而且如果設定了最小有效位,則會在先前呼叫 GetAsyncKeyState之後按下按鍵。 不過,您不應該依賴這個最後的行為;如需詳細資訊,請參閱。
下列情況的傳回值為零:
- 目前的桌面不是使用中的桌面
- 前景執行緒屬於另一個進程,桌面不允許攔截或日誌記錄。
備註
GetAsyncKeyState函式適用于滑鼠按鍵。 不過,它會檢查實體滑鼠按鍵的狀態,而不是實體按鈕所對應的邏輯滑鼠按鍵上。 例如,呼叫 GetAsyncKeyState (VK_LBUTTON) 一律會傳回左實體滑鼠按鍵的狀態,不論它是否對應至左或右邏輯滑鼠按鍵。 您可以呼叫 GetSystemMetrics(SM_SWAPBUTTON)
來判斷系統目前實體滑鼠按鍵與邏輯滑鼠按鍵的對應。
如果滑鼠按鍵已交換,則會傳回 TRUE。
雖然傳回值最不重要的位表示自上次查詢以來是否已按下按鍵,但由於 Windows 的先占式多工本質,另一個應用程式可以呼叫 GetAsyncKeyState 並接收「最近按下」位,而不是您的應用程式。 傳回值最小有效位的行為會嚴格保留,以便與 16 位 Windows 應用程式相容, (非先占式) ,且不應依賴。
您可以使用虛擬機器碼程式碼常數 VK_SHIFT、 VK_CONTROL和 VK_MENU 作為 vKey 參數的值。 這會提供 SHIFT、CTRL 或 ALT 鍵的狀態,而不區分左右。
您可以使用下列虛擬索引鍵程式碼常數做為 vKey 的值,以區分這些索引鍵的左和右實例。
程式碼 | 意義 |
---|---|
VK_LSHIFT | 左移鍵。 |
VK_RSHIFT | 右移鍵。 |
VK_LCONTROL | 左控制鍵。 |
VK_RCONTROL | 右鍵。 |
VK_LMENU | 左側功能表鍵。 |
VK_RMENU | 右功能表鍵。 |
只有在您呼叫 GetKeyboardState、 SetKeyboardState、 GetAsyncKeyState、GetKeyState、 GetKeyState和 MapVirtualKey 函式時,才能使用這些左右辨別常數。
範例
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
switch (msg.message)
{
case WM_KEYDOWN:
if ((GetAsyncKeyState(VK_ESCAPE) & 0x01) && bRunning)
{
Stop();
}
break;
}
}
GitHub 上的 Windows 傳統範例 範例範例。
規格需求
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winuser.h (包括 Windows.h) |
程式庫 | User32.lib |
Dll | User32.dll |