Entwickler-Ecke

Windows API - Simulierte Tastendrücke erkennen???


Masterhawk - Sa 06.11.04 23:05
Titel: Simulierte Tastendrücke erkennen???
Hi, gibt es eine Procedure/function mit der sich gefakte Tastendrücke erkennen lassen...??? Wäre echt nett wenn ihr mir helfen könntet...


BenBE - Sa 06.11.04 23:51

Eine recht einfache Möglichkeit wäre, mit GetAsyncKeyboardState zu prüfen, ob wirklich eine Taste gedrückt ist. Dazu müsstest du einfach in der Nachrichten-Behandlung diese Prüfung einbauen. Liefert GetAsyncKeyboardState, dass keine Taste gedrückt wurde, wurde die Taste simuliert.

Nachteil: Bei hoher Prozessor-Auslastung, kann es passieren, dass auch gedrückte Tasten als "simuliert" eingestuft werden.

Eine andere Möglichkeit wäre, die API-Funktionen zum simulieren von Tastendrücken zu hooken. Das ist aber
1. kompliziert
2. fehleranfällig
3. Überdimensioniert (wie die meisten API-Hooks)


.Chef - Sa 06.11.04 23:56

BenBE hat folgendes geschrieben:
GetAsyncKeyboardState

Meinst du GetAsyncKeyState oder GetKeyboardState? ;-)

Und kann man das nicht mit SetKeyboardState umgehen?


BenBE - So 07.11.04 00:18

Ich meinte GetAsyncKeyState. Und die fragt IMHO direkt die Hardware ab -> keine Manipulation möglich (außer über API-Hook).


Masterhawk - So 07.11.04 18:05

@BenBe: könntest du mir die Source posten, dann kann ich mir bestimmt was daruntervorstellen...Wäre echt nett..

Es sollte so funktionieren, dass ich am ende eine Aussage hab ob der Tastendrück simuliert wurde oder nicht.

Eine Frage zum Schluss: Würde es auch über DirectInput von DirectX gehen???


Motzi - So 07.11.04 18:09

Also auf GetAsyncKeyState würd ich nicht vertrauen..! IMHO liefert aber ein Lowlevel-Keyhook Infos darüber.. müsste man mal im SDK nachschauen...


Masterhawk - So 07.11.04 18:15

Thx, aber könnte das mal einer tun der mehr ahnung davon hat als ich... :?
Ich wäre für jeden geposteten Vorschlag dankbar


toms - So 07.11.04 19:37

Hi,

Habe so was mal mit Hooks gemacht.
Lade keybd_event_Interceptor.zip von http://ezshare.de/files-de/53180/keybd_event_Interceptor.zip.html
runter und starte dann Demo.dpr


BenBE - So 07.11.04 19:47

Im OnKeyDown-Ereignis des Formulars mal folgenden Source probieren:


Delphi-Quelltext
1:
2:
3:
4:
If GetAsyncKeyState(VK_A) <> 0 Then
  Caption := 'Taste wirklich gedrückt!'
eöse
  Caption := 'Taste nur simuliert!';


Hab aber leider kein Delphi zum Testen offen. Bitte guck dir für nähere Infos mal die DOH zur Funktion GetAsyncKeyState an. Dort findest du mehr Infos.


Masterhawk - So 07.11.04 20:09
Titel: It's done
Yeeehaaa,scheint zu funktionieren...thx...Ich danke euch...
Muss jetzt nur noch implementiert werden... :D


Nochmal THANKS AT ALL