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_SHIFT、VK_CONTROL、VK_MENUを使用できます。 これにより、左と右を区別せずに、Shift キー、Ctrl キー、または Alt キーの状態が表示されます。
vKey の値として、次の仮想キー コード定数を使用して、これらのキーの左と右のインスタンスを区別できます。
コード | 説明 |
---|---|
VK_LSHIFT | 左シフト キー。 |
VK_RSHIFT | 右シフト キー。 |
VK_LCONTROL | 左制御キー。 |
VK_RCONTROL | 右制御キー。 |
VK_LMENU | 左側のメニュー キー。 |
VK_RMENU | 右メニュー キー。 |
これらの左と右の区別定数は、 GetKeyboardState、 SetKeyboardState、 GetAsyncKeyState、 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 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winuser.h (Windows.h を含む) |
Library | User32.lib |
[DLL] | User32.dll |