(WinAPI) Globale Tastenabfrage

Hier kannst du häufig gestellte Fragen/Antworten und Tutorials lesen und schreiben.
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

(WinAPI) Globale Tastenabfrage

Beitrag 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
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag 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
sire
Beiträge: 10
Registriert: 25.11.2005 02:09

Beitrag 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
Antworten