Seite 1 von 1

(WinAPI) Globale Tastenabfrage

Verfasst: 16.07.2005 23:54
von bluejoke
Ich hoffe, die Häufigkeit der Frage ist gegeben - dieses Forum erscheint mir jedenfalls passend:
Lukas-P hat geschrieben:Wie erkennne ich das die Maus gedrückt wurde (also nicht im Screen oder Window)?
Hroudtwolf hat geschrieben:

Code: Alles auswählen

If GetAsyncKeyState_(#VK_LBUTTON)
   Debug "Links"
EndIf

If GetAsyncKeyState_(#VK_RBUTTON)
   Debug "Rechts"
EndIf
GetAsyncKeyState_(#KONSTANTE) prüft, ob die per #KONSTANTE definierte Taste gedrückt ist.

GetAsyncKeyState_ arbeitet dabei ähnlich WindowEvent - es wird also nicht auf ein Ereignis gewartet. Deshalb muss, um keine Ereignisse zu verpassen, die Funktion immer wieder aufgerufen werden:

Code: Alles auswählen

Repeat
If GetAsyncKeyState_(#VK_LBUTTON)
  Debug "Links"
  Break
EndIf

If GetAsyncKeyState_(#VK_RBUTTON)
  Debug "Rechts"
  Break
EndIf
Delay(10)
ForEver
Eine detaillierte Funktionsbeschreibung gibt es hier: MSDN - GetAsyncKeyState Function
Mögliche Konstanten findet ihr hier: MSDN - Virtual Key Codes

Verfasst: 05.10.2005 14:21
von Mischa
Absolut notwendig ist es außerdem den Puffer
vor der ersten Kontrolle zu löschen!!

Sonst geht das schief.

Also..

Code: Alles auswählen

GetAsyncKeyState_(#VK_LBUTTON)
GetAsyncKeyState_(#VK_RBUTTON)

Repeat
If GetAsyncKeyState_(#VK_LBUTTON)
  Debug "Links"
  Break
EndIf

If GetAsyncKeyState_(#VK_RBUTTON)
  Debug "Rechts"
  Break
EndIf
Delay(10)
ForEver
Gruß,
Mischa

Verfasst: 03.12.2006 02:52
von sire
Mischa hat geschrieben:Absolut notwendig ist es außerdem den Puffer
vor der ersten Kontrolle zu löschen!!
Muß man nicht, wenn man sich den Rückgabecode genauer anschaut.

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.

Der Rückgabewert ist ein Word, eine Abfrage, ob die Taste JETZT gedrückt ist, könnte man also folgendermaßen durchführen:

Code: Alles auswählen

If GetAsyncKeyState_(VK_CONTROL)&$8000
  ; Control ist derzeit gedrückt
Endif
Wenn man explizit wissen möchte, ob die gesuchte Taste seit dem letzten Aufruf gedrückt (inzwischen aber vielleicht schon wieder losgelassen) wurde:

Code: Alles auswählen

If GetAsyncKeyState_(VK_CONTROL)&1
  ; Control ist wurde seit dem letzten Aufruf gedrückt
Endif