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_SHIFTVK_CONTROLVK_MENU 作為 vKey 參數的值。 這會提供 SHIFT、CTRL 或 ALT 鍵的狀態,而不區分左右。

您可以使用下列虛擬索引鍵程式碼常數做為 vKey 的值,以區分這些索引鍵的左和右實例。

程式碼 意義
VK_LSHIFT 左移鍵。
VK_RSHIFT 右移鍵。
VK_LCONTROL 左控制鍵。
VK_RCONTROL 右鍵。
VK_LMENU 左側功能表鍵。
VK_RMENU 右功能表鍵。
 

只有在您呼叫 GetKeyboardStateSetKeyboardStateGetAsyncKeyState、GetKeyStateGetKeyStateMapVirtualKey 函式時,才能使用這些左右辨別常數。

範例

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

另請參閱