You are on page 1of 6

Home Library Learn Downloads Support Community Sign in | United States - English | Preferences

Search MSDN with Bing GetAsyncKeyState Function


MSDN Library
Windows Development Determines whether a key is up or down at the time the function is called, and whether
Windows Application UI Development the key was pressed after a previous call to GetAsyncKeyState.
User Interaction
Keyboard and Mouse Input Syntax
Keyboard Input Copy
Keyboard Input Reference SHORT WINAPI GetAsyncKeyState(
  __in  int vKey
Keyboard Input Functions
);
GetAsyncKeyState

Community Content Parameters


C# syntax vKey [in]
[DllImport("user32.dll", CharSet... int
vb.net syntax The virtual-key code. For more information, see Virtual Key Codes.
<DllImport("user32.dll", Char...
You can use left- and right-distinguishing constants to specify certain keys. See
More...
the Remarks section for further information.

Return Value

SHORT

If the function succeeds, the return value specifies whether the key was pressed since
the last call to GetAsyncKeyState, and whether the key is currently up or down. If the
most significant bit is set, the key is down, and if the least significant bit is set, the key
was pressed after the previous call to GetAsyncKeyState. However, you should not
rely on this last behavior; for more information, see the Remarks.

The return value is zero for the following cases:


Click to customize your PDFs pdfcrowd.com
The current desktop is not the active desktop
The foreground thread belongs to another process and the desktop does not
allow the hook or the journal record.

Remarks

The GetAsyncKeyState function works with mouse buttons. However, it checks on the
state of the physical mouse buttons, not on the logical mouse buttons that the physical
buttons are mapped to. For example, the call GetAsyncKeyState(VK_LBUTTON)
always returns the state of the left physical mouse button, regardless of whether it is
mapped to the left or right logical mouse button. You can determine the system's
current mapping of physical mouse buttons to logical mouse buttons by calling
GetSystemMetrics(SM_SWAPBUTTON) .

which returns TRUE if the mouse buttons have been swapped.

Although the least significant bit of the return value indicates whether the key has been
pressed since the last query, due to the pre-emptive multitasking nature of Windows,
another application can call GetAsyncKeyState and receive the "recently pressed" bit
instead of your application. The behavior of the least significant bit of the return value is
retained strictly for compatibility with 16-bit Windows applications (which are non-
preemptive) and should not be relied upon.

You can use the virtual-key code constants VK_SHIFT, VK_CONTROL, and VK_MENU
as values for the vKey parameter. This gives the state of the SHIFT, CTRL, or ALT keys
without distinguishing between left and right.

You can use the following virtual-key code constants as values for vKey to distinguish
between the left and right instances of those keys.

Code Meaning

VK_LSHIFT Left-shift key.

VK_RSHIFT Right-shift key.

VK_LCONTROL Left-control key.

Click to customize your PDFs pdfcrowd.com


VK_RCONTROL Right-control key.

VK_LMENU Left-menu key.

VK_RMENU Right-menu key.

These left- and right-distinguishing constants are only available when you call the
GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and
MapVirtualKey functions.

Requirements

Windows 2000 Professional


Minimum supported client

Windows 2000 Server


Minimum supported server

Winuser.h (include Windows.h)


Header

User32.lib
Library

User32.dll
DLL

See Also

Reference
GetKeyboardState
GetKeyState
Click to customize your PDFs pdfcrowd.com
MapVirtualKey
SetKeyboardState

Conceptual
Keyboard Input

Other Resources
GetSystemMetrics

Send comments about this topic to Microsoft

Build date: 6/4/2010

Community Content Add FAQ

C# syntax

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern short GetAsyncKeyState(int vkey);

History

Click to customize your PDFs pdfcrowd.com


4/25/2009
dmex

vb.net syntax

<DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True)> Publ
ic Shared Function GetAsyncKeyState(ByVal vkey As Integer) As Short
End Function

History

4/25/2009
dmex

Visual Basic 9 declaration

Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As I
nt32) As UShort

Usage:
Public Shared ReadOnly Property KeyStatus(ByVal Key As Keys) As Boolean
    Get
        If Key = Keys.LButton AndAlso My.Computer.Mouse.ButtonsSwapped The
n
            Key = Keys.RButton
        ElseIf Key = Keys.RButton AndAlso My.Computer.Mouse.ButtonsSwapped
 Then
           Key = Keys.LButton
        End If
        Return API.Devices.GetAsyncKeyState(Key) And &H8000US
    End Get
End Property

History
Click to customize your PDFs pdfcrowd.com
9/27/2008
Đonny

© 2010 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks | Privacy Statement |
Feedback

Click to customize your PDFs pdfcrowd.com

You might also like