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 |