Condividi tramite


Funzione GetAsyncKeyState (winuser.h)

Determina se un tasto è attivo o inattivo al momento della chiamata alla funzione e se il tasto è stato premuto dopo una chiamata precedente a GetAsyncKeyState.

Sintassi

SHORT GetAsyncKeyState(
  [in] int vKey
);

Parametri

[in] vKey

Tipo: int

Codice della chiave virtuale. Per altre informazioni, vedere Codici di chiave virtuale.

È possibile usare costanti distinzione sinistra e destra per specificare determinate chiavi. Per altre informazioni, vedere la sezione Osservazioni.

Valore restituito

Tipo: SHORT

Se la funzione ha esito positivo, il valore restituito specifica se il tasto è stato premuto dall'ultima chiamata a GetAsyncKeyState e se il tasto è attivo o inattivo. Se il bit più significativo è impostato, il tasto è inattivo e se è impostato il bit meno significativo, il tasto è stato premuto dopo la chiamata precedente a GetAsyncKeyState. Tuttavia, non è consigliabile basarsi su questo ultimo comportamento; per altre informazioni, vedere la sezione Osservazioni.

Il valore restituito è zero per i casi seguenti:

  • Il desktop corrente non è il desktop attivo
  • Il thread in primo piano appartiene a un altro processo e il desktop non consente l'hook o il record journal.

Commenti

La funzione GetAsyncKeyState funziona con i pulsanti del mouse. Tuttavia, controlla lo stato dei pulsanti fisici del mouse, non sui pulsanti del mouse logici a cui sono mappati i pulsanti fisici. Ad esempio, la chiamata a GetAsyncKeyState(VK_LBUTTON) restituisce sempre lo stato del pulsante del mouse fisico sinistro, indipendentemente dal fatto che sia mappato al pulsante del mouse logico sinistro o destro. È possibile determinare il mapping corrente dei pulsanti del mouse fisici ai pulsanti del mouse logici chiamando GetSystemMetrics(SM_SWAPBUTTON).

che restituisce TRUE se i pulsanti del mouse sono stati scambiati.

Anche se il bit meno significativo del valore restituito indica se il tasto è stato premuto dall'ultima query, a causa della natura preemptive multitasking di Windows, un'altra applicazione può chiamare GetAsyncKeyState e ricevere il bit "premuto di recente" anziché l'applicazione. Il comportamento del bit meno significativo del valore restituito viene mantenuto rigorosamente per la compatibilità con le applicazioni Windows a 16 bit (che non sono preemptive) e non devono essere affidate.

È possibile usare le costanti di codice della chiave virtuale VK_SHIFT, VK_CONTROL e VK_MENU come valori per il parametro vKey . In questo modo si ottiene lo stato dei tasti MAIUSC, CTRL o ALT senza distinguere tra sinistra e destra.

È possibile usare le costanti di codice della chiave virtuale seguenti come valori per vKey per distinguere tra le istanze di sinistra e destra di tali chiavi.

Codice Significato
VK_LSHIFT Tasto di spostamento sinistro.
VK_RSHIFT Tasto di spostamento destro.
VK_LCONTROL Tasto di controllo sinistro.
VK_RCONTROL Tasto di controllo destro.
VK_LMENU Tasto di menu a sinistra.
VK_RMENU Tasto di menu a destra.
 

Queste costanti distinzione sinistra e destra sono disponibili solo quando si chiamano le funzioni GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState e MapVirtualKey .

Esempio

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

Esempio di esempi classici di Windows in GitHub.

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winuser.h (include Windows.h)
Libreria User32.lib
DLL User32.dll

Vedi anche