GetAsyncKeyState-Funktion (winuser.h)

Bestimmt, ob eine Taste zum Zeitpunkt des Aufrufs der Funktion gedrückt ist oder nicht und ob die Taste nach einem Aufruf von GetAsyncKeyState gedrückt wurde

Syntax

SHORT GetAsyncKeyState(
  [in] int vKey
);

Parameter

[in] vKey

Typ: int

Der Code des virtuellen Schlüssels. Weitere Informationen finden Sie unter Virtuelle Schlüsselcodes.

Sie können linke und rechte Unterscheidungskonstanten verwenden, um bestimmte Schlüssel anzugeben. Weitere Informationen finden Sie im Abschnitt Hinweise.

Rückgabewert

Typ: SHORT

Wenn die Funktion erfolgreich ist, gibt der Rückgabewert an, ob die Taste seit dem letzten Aufruf von GetAsyncKeyState gedrückt wurde und ob die Taste aktuell nach oben oder unten ist. Wenn das bedeutendste Bit festgelegt ist, ist die Taste ausgefallen, und wenn das am wenigsten signifikante Bit festgelegt ist, wurde die Taste nach dem vorherigen Aufruf von GetAsyncKeyState gedrückt. Sie sollten sich jedoch nicht auf dieses letzte Verhalten verlassen. Weitere Informationen finden Sie in den Hinweisen.

Der Rückgabewert ist für die folgenden Fälle null:

  • Der aktuelle Desktop ist nicht der aktive Desktop.
  • Der Vordergrundthread gehört zu einem anderen Prozess, und der Desktop lässt den Hook oder den Journaldatensatz nicht zu.

Hinweise

Die GetAsyncKeyState-Funktion funktioniert mit Maustasten. Es überprüft jedoch den Zustand der physischen Maustasten, nicht die logischen Maustasten, denen die physischen Schaltflächen zugeordnet sind. Beispielsweise gibt der Aufruf GetAsyncKeyState(VK_LBUTTON) immer den Zustand der linken physischen Maustaste zurück, unabhängig davon, ob er der linken oder rechten logischen Maustaste zugeordnet ist. Sie können die aktuelle Zuordnung physischer Maustasten zu logischen Maustasten im System ermitteln, indem Sie aufrufen GetSystemMetrics(SM_SWAPBUTTON).

gibt TRUE zurück, wenn die Maustasten getauscht wurden.

Obwohl das geringstmögliche Bit des Rückgabewerts angibt, ob die Taste seit der letzten Abfrage gedrückt wurde, kann aufgrund der präemptiven Multitasking-Natur von Windows eine andere Anwendung GetAsyncKeyState aufrufen und das "zuletzt gedrückte" Bit anstelle Ihrer Anwendung empfangen. Das Verhalten des geringstmöglichen Bits des Rückgabewerts wird aus Gründen der Kompatibilität mit 16-Bit-Windows-Anwendungen (die nicht präemptiv sind) beibehalten und sollte nicht verwendet werden.

Sie können die Codekonstanten virtueller Schlüssel VK_SHIFT, VK_CONTROL und VK_MENU als Werte für den vKey-Parameter verwenden. Dies gibt den Zustand der UMSCHALT-, STRG- oder ALT-TASTE an, ohne zwischen links und rechts zu unterscheiden.

Sie können die folgenden Virtuellen Schlüsselcodekonstanten als Werte für vKey verwenden, um zwischen den linken und rechten Instanzen dieser Schlüssel zu unterscheiden.

Code Bedeutung
VK_LSHIFT Linke Umschalttaste.
VK_RSHIFT Rechtsschalttaste.
VK_LCONTROL Linke Steuerungstaste.
VK_RCONTROL Die rechte Steuerungstaste.
VK_LMENU Linke Menütaste.
VK_RMENU Rechte Menütaste.
 

Diese Links- und Rechtsunterscheidungskonstanten sind nur verfügbar, wenn Sie die Funktionen GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState und MapVirtualKey aufrufen.

Beispiel

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;
    }
}

Beispiel aus Klassische Windows-Beispiele auf GitHub.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h (windows.h einschließen)
Bibliothek User32.lib
DLL User32.dll

Weitere Informationen