Tastatur & Maus

GetAsyncKeyState

Prüft, ob eine bestimmte Taste auf der Tastatur oder Maus aktuell gedrückt wird oder seit dem letzten Aufruf der Prozedur gedrückt wurde. Mit dieser Funktion kann auch z. B. zwischen der linken und rechten Strg-Taste oder der linken und rechten Shift-Taste unterschieden werden. Falls in der Systemsteuerung die linke und rechte Maustaste vertauscht wurde, wird das von der Prozedur ignoriert (eine zusätzliche Abfrage auf GetSystemMetrics(SW_SWAPBUTTON) kann das überprüfen).

Ist das höchste Bit des Rückgabewertes gesetzt (&H8000), ist die Taste gedrückt. Wenn das niedrigste Bit (&H1) gesetzt ist, wurde die Taste nach dem letzten Aufruf von GetAsyncKeyState gedrückt - falls das nicht schon von einer anderen Anwendung empfangen wurde. Daher kann die Auswertung eines früheren Tastendrucks u. U. unzuverlässig sein.

#If VBA7 Then
    Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" _
        (ByVal vKey As eKey) As Long
#Else
    Private Declare Function GetAsyncKeyState Lib "user32" _
        (ByVal vKey As eKey) As Long
#End If

Public Enum eKey
    VK_LBUTTON = &H1     'Linke Maustaste
    VK_RBUTTON = &H2     'Rechte Maustaste
    VK_CANCEL = &H3      'Strg+Unterbr
    VK_MBUTTON = &H4     'Mittlere Maustaste
    VK_XBUTTON1 = &H5    'linke zusätzliche Maustaste (4. Taste)
    VK_XBUTTON2 = &H6    'rechte zusätzliche Maustaste (5. Taste)
    VK_BACK = &H8        'Rücktaste
    VK_TAB = &H9         'Tabulator
    VK_CLEAR = &HC       'Löschen
    VK_RETURN = &HD      'Enter
    VK_SHIFT = &H10      'Shift (siehe auch VK_LSHIFT und VK_RSHIFT)
    VK_CONTROL = &H11    'Strg (siehe auch VK_LCONTROL und VK_RCONTROL)
    VK_MENU = &H12       'Alt
    VK_PAUSE = &H13      'Pause
    VK_CAPITAL = &H14    'Feststelltaste
    VK_KANA = &H15       'IME Kana (asiatische Tastaturen)
    VK_HANGUL = &H15     'IME Hangul (asiatische Tastaturen)
    VK_JUNJA = &H17      'IME Junja (asiatische Tastaturen)
    VK_FINAL = &H18      'IME final (asiatische Tastaturen)
    VK_HANJA = &H19      'IME Hanja (asiatische Tastaturen)
    VK_KANJI = &H19      'IME Kanji (asiatische Tastaturen)
    VK_ESCAPE = &H1B     'ESC
    VK_CONVERT = &H1C    'IME convert (asiatische Tastaturen)
    VK_NONCONVERT = &H1D 'IME nonconvert (asiatische Tastaturen)
    VK_ACCEPT = &H1E     'IME accept (asiatische Tastaturen)
    VK_MODECHANGE = &H1F 'IME mode change request (asiatische Tastaturen)
    VK_SPACE = &H20      'Leertaste
    VK_PRIOR = &H21      'Bild hoch
    VK_NEXT = &H22       'Bild ab
    VK_END = &H23        'Ende
    VK_HOME = &H24       'Pos1
    VK_LEFT = &H25       'Cursor Links
    VK_UP = &H26         'Cursor Hoch
    VK_RIGHT = &H27      'Cursor Rechts
    VK_DOWN = &H28       'Cursor Unten
    VK_SELECT = &H29     'Select
    VK_PRINT = &H2A      'PRINTtaste
    VK_EXECUTE = &H2B    'Ausführen
    VK_SNAPSHOT = &H2C   'Druck
    VK_INSERT = &H2D     'Einfg
    VK_DELETE = &H2E     'Entf
    VK_HELP = &H2F       'Hilfetaste
    VK_0 = &H30          '0
    VK_1 = &H31          '1
    VK_2 = &H32          '2
    VK_3 = &H33          '3
    VK_4 = &H34          '4
    VK_5 = &H35          '5
    VK_6 = &H36          '6
    VK_7 = &H37          '7
    VK_8 = &H38          '8
    VK_9 = &H39          '9
    VK_A = &H41          'A
    VK_B = &H42          'B
    VK_C = &H43          'C
    VK_D = &H44          'D
    VK_E = &H45          'E
    VK_F = &H46          'F
    VK_G = &H47          'G
    VK_H = &H48          'H
    VK_I = &H49          'I
    VK_J = &H4A          'J
    VK_K = &H4B          'K
    VK_L = &H4C          'L
    VK_M = &H4D          'M
    VK_N = &H4E          'N
    VK_O = &H4F          'O
    VK_P = &H50          'P
    VK_Q = &H51          'Q
    VK_R = &H52          'R
    VK_S = &H53          'S
    VK_T = &H54          'T
    VK_U = &H55          'U
    VK_V = &H56          'V
    VK_W = &H57          'W
    VK_X = &H58          'X
    VK_Y = &H59          'Y
    VK_Z = &H5A          'Z
    VK_LWIN = &H5B       'Linke Windowstaste
    VK_RWIN = &H5C       'Rechte Windowstaste
    VK_APPS = &H5D       'Applications-Taste
    VK_SLEEP = &H5F      'Computer Sleep key
    VK_NUMPAD0 = &H60    '0 im Ziffernblock
    VK_NUMPAD1 = &H61    '1 im Ziffernblock
    VK_NUMPAD2 = &H62    '2 im Ziffernblock
    VK_NUMPAD3 = &H63    '3 im Ziffernblock
    VK_NUMPAD4 = &H64    '4 im Ziffernblock
    VK_NUMPAD5 = &H65    '5 im Ziffernblock
    VK_NUMPAD6 = &H66    '6 im Ziffernblock
    VK_NUMPAD7 = &H67    '7 im Ziffernblock
    VK_NUMPAD8 = &H68    '8 im Ziffernblock
    VK_NUMPAD9 = &H69    '9 im Ziffernblock
    VK_MULTIPLY = &H6A   '* im Ziffernblock (multiplizieren)
    VK_ADD = &H6B        '+ im Ziffernblock (addieren)
    VK_SEPARATOR = &H6C  'Separator
    VK_SUBTRACT = &H6D   '- im Ziffernblock (subtrahieren)
    VK_DECIMAL = &H6E    ', im Ziffernblock (Dezimalzeichen)
    VK_DIVIDE = &H6F     '/ im Ziffernblock (dividieren)
    VK_F1 = &H70         'F1
    VK_F2 = &H71         'F2
    VK_F3 = &H72         'F3
    VK_F4 = &H73         'F4
    VK_F5 = &H74         'F5
    VK_F6 = &H75         'F6
    VK_F7 = &H76         'F7
    VK_F8 = &H77         'F8
    VK_F9 = &H78         'F9
    VK_F10 = &H79        'F10
    VK_F11 = &H7A        'F11
    VK_F12 = &H7B        'F12
    VK_F13 = &H7C        'F13
    VK_F14 = &H7D        'F14
    VK_F15 = &H7E        'F15
    VK_F16 = &H7F        'F16
    VK_F17 = &H80        'F17
    VK_F18 = &H81        'F18
    VK_F19 = &H82        'F19
    VK_F20 = &H83        'F20
    VK_F21 = &H84        'F21
    VK_F22 = &H85        'F22
    VK_F23 = &H86        'F23
    VK_F24 = &H87        'F24
    VK_NUMLOCK = &H90    'NUM LOCK
    VK_SCROLL = &H91     'Rollen
    VK_LSHIFT = &HA0     'Linke SHIFT-Taste
    VK_RSHIFT = &HA1     'Rechte SHIFT-Taste
    VK_LCONTROL = &HA2   'Linke Strg-Taste
    VK_RCONTROL = &HA3   'Rechte Strg-Taste
    VK_LMENU = &HA4      'Linke Menu-Taste
    VK_RMENU = &HA5      'Rechte Menu-Taste
    VK_BROWSER_BACK = &HA6        'Browser Zurück
    VK_BROWSER_FORWARD = &HA7     'Browser Vorwärts
    VK_BROWSER_REFRESH = &HA8     'Browser Refresh
    VK_BROWSER_STOP = &HA9        'Browser Stop
    VK_BROWSER_SEARCH = &HAA      'Browser Suche
    VK_BROWSER_FAVORITES = &HAB   'Browser Favoriten
    VK_BROWSER_HOME = &HAC        'Browser Start/Home
    VK_VOLUME_MUTE = &HAD         'Lautstärke stumm
    VK_VOLUME_DOWN = &HAE         'Lautstärke Leiser
    VK_VOLUME_UP = &HAF           'Lautstärke lauter
    VK_MEDIA_NEXT_TRACK = &HB0    'Nächster Titel
    VK_MEDIA_PREV_TRACK = &HB1    'Voriger Titel
    VK_MEDIA_STOP = &HB2          'Titel stoppen
    VK_MEDIA_PLAY_PAUSE = &HB3    'Wiedergabe/Pause
    VK_LAUNCH_MAIL = &HB4         'Mail starten
    VK_LAUNCH_MEDIA_SELECT = &HB5 'Medium wählen
    VK_LAUNCH_APP1 = &HB6         'Anwendung1 starten
    VK_LAUNCH_APP2 = &HB7         'Anwendung2 starten
    VK_OEM_1 = &HBA       'Tastaturabhängig. US-Standard: ;. Deutsch: ü
    VK_OEM_PLUS = &HBB    '+
    VK_OEM_COMMA = &HBC   ',
    VK_OEM_MINUS = &HBD   '-
    VK_OEM_PERIOD = &HBE  '.
    VK_OEM_2 = &HBF       'Tastaturabhängig. US-Standard: /. Deutsch: #
    VK_OEM_3 = &HC0       'Tastaturabhängig. US-Standard: ~. Deutsch: ö
    VK_OEM_4 = &HDB       'Tastaturabhängig. US-Standard: [. Deutsch: ß
    VK_OEM_5 = &HDC       'Tastaturabhängig. US-Standard: \. Deutsch: ^
    VK_OEM_6 = &HDD       'Tastaturabhängig. US-Standard: ]. Deutsch: ´
    VK_OEM_7 = &HDE       'Tastaturabhängig. US-Standard: '. Deutsch: ä
    VK_OEM_8 = &HDF       'Tastaturabhängig.
    VK_OEM_102 = &HE2     'Tastaturabhängig. Deutsch: <
    VK_PROCESSKEY = &HE5  'IME PROCESS (asiatische Tastaturen)
End Enum

Function
apiTasteUnten(Taste As eKey, Optional jetzt As Boolean = True) As Boolean If jetzt Then apiTasteUnten = GetAsyncKeyState(Taste) And &H8000 'Taste ist aktuell gedrückt Else apiTasteUnten = GetAsyncKeyState(Taste) And &H1 'Taste war seit letzten Aufruf gedrückt End If End Function

GetCursorPos

Ermittelt die aktuelle Position der Maus. War die Funktion erfolgreich, ist der Rückgabewert größer „0“.

#If VBA7 Then
    Private Declare PtrSafe Function GetCursorPos Lib "user32" _
        (lpPoint As POINT_TYPE) As Long
#Else
    Private Declare Function GetCursorPos Lib "user32" _
        (lpPoint As POINT_TYPE) As Long
#End If

Private Type POINT_TYPE
    x As Long
    y As Long
End Type

Sub
demoMausPos() Dim lpPoint As POINT_TYPE If GetCursorPos(lpPoint) > 0 Then MsgBox "Mausposition:" & vbLf & lpPoint.x & "," & lpPoint.y End If End Sub