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?
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:
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.
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!