共用方式為


GetAsyncKeyState 函式 (winuser.h)

判斷在呼叫函式時,鍵值是向上還是向下,以及該鍵是否是在先前呼叫 GetAsyncKeyState 後按下的。

語法

SHORT GetAsyncKeyState(
  [in] int vKey
);

參數

[in] vKey

類型:int

虛擬金鑰代碼。 欲了解更多資訊,請參閱 虛擬鑰匙代碼

你可以用左右區分常數來指定某些鍵。 詳情請參閱備註區。

返回值

類型:

若函式成功,回傳值會指定該鍵自上次呼叫 GetAsyncKeyState 後是否被按下,以及鍵目前是上或下。 如果設定了最高有效位元,則該金鑰為下行;若設定為最低有效位元,則該金鑰是在上一次呼叫 GetAsyncKeyState 後按下的。 不過,你不應該依賴最後的行為;欲了解更多資訊,請參閱備註。

以下情況下,回傳值為零:

  • 目前的桌面不是主動式桌面
  • 前景執行緒屬於另一個程序,桌面不允許掛鉤或日誌記錄。

備註

GetAsyncKeyState 功能是用滑鼠按鍵操作的。 不過,它檢查的是實體滑鼠按鈕的狀態,而不是物理按鈕映射到的邏輯滑鼠按鈕。 例如, GetAsyncKeyState(VK_LBUTTON) 呼叫總是回傳左滑鼠物理按鈕的狀態,無論它對應到左鍵還是右鍵邏輯鍵。 你可以透過呼叫 GetSystemMetrics(SM_SWAPBUTTON)來判斷系統目前將實體滑鼠按鍵映射到邏輯滑鼠按鍵的狀況。

若滑鼠按鈕被調換,則回傳 TRUE。

雖然回傳值的最低有效位元表示該鍵自上次查詢以來是否被按下,但由於 Windows 的搶占式多工特性,其他應用程式可能會呼叫 GetAsyncKeyState 並接收「最近按下」的位元,而非你的應用程式。 回傳值中最低有效位元的行為嚴格保留,以相容 16 位元 Windows 應用程式(非搶占式),不應依賴它。

你可以用虛擬金鑰的常數 VK_SHIFTVK_CONTROLVK_MENU 作為 vKey 參數的值。 這會顯示 SHIFT、CTRL 或 ALT 鍵的狀態,且不區分左右鍵。

你可以使用以下虛擬金鑰的程式碼常數作為 vKey 的值,來區分這些金鑰的左右實例。

Code Meaning
VK_LSHIFT 左Shift鍵。
VK_RSHIFT 右Shift鍵。
VK_LCONTROL 左控制鍵。
VK_RCONTROL 右控制鍵。
VK_LMENU 左選單鍵。
VK_RMENU 右選單鍵。
 

這些左右區分常數僅在呼叫 GetKeyboardStateSetKeyboardStateGetAsyncKeyStateGetKeyStateMapVirtualKey 函式時可用。

Example

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 傳統範例 的範例。

需求

Requirement 價值觀
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
Header winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll

另請參閱