Problem mit Keyboard-Hook

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Problem mit Keyboard-Hook

Beitrag von Sunny »

Ich hab hier mal einen kleinen Code-Schnipsel:

Code: Alles auswählen

Procedure.s Keylog()
  For i = 5 To 255
    
    If GetAsyncKeyState_(i)
      Debug i
      
      While GetAsyncKeyState_(i)
        Delay(50)
      Wend
      
    EndIf
    
  Next
  
EndProcedure


Repeat
  
  Delay(50)
  
  Keylog()
  
Until GetAsyncKeyState_(27)

End
Nun Folgendes:
Wenn ich jetzt z.B. die Strg - Taste drücke, dann müssten mir eigentlich jedes mal die Werte 17 und 162 ausgegeben werden (17 beim drücken der Taste und 162 beim loslassen). Nun ja, manchmal passiert das auch, aber manchmal wird nur der Wert 17 zurückgegeben und die 162 bleibt beim loslassen der Taste einfach aus. Woran könnte das liegen?
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Problem mit Keyboard-Hook

Beitrag von c4s »

Das ist kein richtiger Keyboard-Hook. GetAsyncKeyState_() ist zudem bekannt dafür, dass gelegentlich Events verschluckt werden können. Ich empfehle eher etwas in Richtung folgendem zu verwenden:

Code: Alles auswählen

SetWindowsHookEx_(#WH_KEYBOARD_LL, @KeyboardHook(), [...]
...Näheres sollte die Such-Funktion liefern.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Problem mit Keyboard-Hook

Beitrag von Nino »

Folgendes funktioniert hier prima (PB 4.60, Windows XP 32 Bit):

Code: Alles auswählen

Define prevState.i, state.i

Repeat
   Delay(50)
   state = (GetAsyncKeyState_(#VK_CONTROL) <> 0) Or #False
   If prevState <> state
      Debug state
      prevState = state
   EndIf
Until GetAsyncKeyState_(#VK_ESCAPE)
Aber ich meine auch, dass GetAsyncKeyState_() für einen allgemeinen Keylogger nicht gut geeignet ist. Und ein "Hook" ist's eh nicht.

Grüße, Nino
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Problem mit Keyboard-Hook

Beitrag von Thorium »

Ein Hook ist das wirklich nicht, verschluckt wird allerdings auch nichts, man muss nur den Rückgabewert richtig auswerten, siehe dazu MSDN. Der Rückgabewert beinhaltet 2 Informationen. Ob die Taste gedrückt ist und ob sie seid dem letzen Aufruf gedrückt wurde. Wie man das auswertet siehe MSDN.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten