GetAsyncKeyState 関数 (winuser.h)

関数の呼び出し時にキーが押されているかどうか、および GetAsyncKeyState の前回の呼び出し後にキーが押されたかどうかを判別します。

構文

SHORT GetAsyncKeyState(
  [in] int vKey
);

パラメーター

[in] vKey

型: int

仮想キー コード。 詳細については、「 仮想キー コード」を参照してください。

左と右の区別定数を使用して、特定のキーを指定できます。 詳細については、「解説」セクションを参照してください。

戻り値

種類: SHORT

関数が成功した場合、戻り値は 、GetAsyncKeyState の最後の呼び出し以降にキーが押されたかどうか、およびキーが現在上下しているかどうかを指定します。 最上位ビットが設定されている場合、キーはダウンし、最下位ビットが設定されている場合は、 GetAsyncKeyState の前回の呼び出しの後にキーが押されました。 ただし、この最後の動作に依存しないでください。詳細については、「解説」を参照してください。

次の場合、戻り値は 0 です。

  • 現在のデスクトップがアクティブなデスクトップではありません
  • フォアグラウンド スレッドは別のプロセスに属しており、デスクトップではフックまたはジャーナル レコードを許可しません。

解説

GetAsyncKeyState 関数は、マウス ボタンで動作します。 ただし、物理ボタンがマップされている論理マウス ボタンではなく、物理マウス ボタンの状態を確認します。 たとえば、 GetAsyncKeyState(VK_LBUTTON) の呼び出しでは、左または右の論理マウス ボタンにマップされているかどうかに関係なく、常に左の物理マウス ボタンの状態が返されます。 を呼び出 GetSystemMetrics(SM_SWAPBUTTON)すことで、物理マウス ボタンと論理マウス ボタンのシステムの現在のマッピングを確認できます。

マウス ボタンがスワップされている場合は TRUE を返します。

戻り値の最下位ビットは、前回のクエリ以降にキーが押されたかどうかを示しますが、Windows のプリエンプティブ なマルチタスクの性質により、別のアプリケーションで GetAsyncKeyState を呼び出し、アプリケーションの代わりに "最近押された" ビットを受け取ることができます。 戻り値の最下位ビットの動作は、16 ビットの Windows アプリケーション (プリエンプティブではない) との互換性のために厳密に保持されるため、依存しないでください。

vKey パラメーターの値として、仮想キー コード定数VK_SHIFTVK_CONTROLVK_MENUを使用できます。 これにより、左と右を区別せずに、Shift キー、Ctrl キー、または Alt キーの状態が表示されます。

vKey の値として、次の仮想キー コード定数を使用して、これらのキーの左と右のインスタンスを区別できます。

コード 説明
VK_LSHIFT 左シフト キー。
VK_RSHIFT 右シフト キー。
VK_LCONTROL 左制御キー。
VK_RCONTROL 右制御キー。
VK_LMENU 左側のメニュー キー。
VK_RMENU 右メニュー キー。
 

これらの左と右の区別定数は、 GetKeyboardStateSetKeyboardStateGetAsyncKeyStateGetKeyStateおよび 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 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll

関連項目