2010-12-29 4 views
1

Gibt es eine Möglichkeit, simulierte Tastatur-/Mauseingaben unter Windows zu erkennen? Zum Beispiel gibt ein Benutzer etwas auf seiner Tastatur gegen sendKeys/PostMessage/Bildschirmtastatur ein. Gibt es eine Möglichkeit, die ich zwischen den beiden unterscheiden kann?Erkennen simulierter Tastatur-/Mauseingabe

EDIT: Vielleicht würde ein Beispiel helfen. Ich mache ein Spiel und möchte zwischen echten Eingaben und WinAPI-basierten Tastatur/Maus-Nachrichten unterscheiden.

+0

Es ist eine ziemlich witzige Frage, denn wenn die Antwort Ja ist, kann ich fast jemand anderes fragen sehen: Wie verhindert man, dass Anwendungen synthetisierten Input erkennen? – Mehrdad

+0

Ja, natürlich ... – Dave

+0

@Lambert: Das ist ein einfacher, ich habe bisher fünf Antworten. (A) virtueller Tastaturgerätetreiber (B) virtueller Computer (C) PS/2-Tastenanschlaggenerator (D) Roboterarm-Drucktasten auf einer "echten" Tastatur (E) [Pitching-Maschine] (http://video.google.com/videoplay? docid = -5503582578132361295) –

Antwort

4

Ich könnte falsch sein, aber die Tastatur auf dem Bildschirm (und andere Anwendungen, die Benutzereingaben simulieren) höchstwahrscheinlich verwenden die API Send:

Send arbeitet auf der untersten Ebene des Eingangsstapels. Es ist nur eine Hintertür in denselben Eingabemechanismus, den die Tastatur- und Maustreiber verwenden, um dem Fenstermanager mitzuteilen, dass der Benutzer Eingaben generiert hat. Quelle: http://blogs.msdn.com/b/oldnewthing/archive/2010/12/21/10107494.aspx

So gibt es wohl keine Möglichkeit zu sagen, ob die Eingabe von einer „echten“ Tastatur kommt oder nicht.

+3

"anschließen, der von einer echten Tastatur kommt" ist nicht einmal ausreichend. Dave wollte wissen, ob es ein Benutzer ist, der auf seiner Tastatur tippt (und nicht, wie ich vermute, einen Robotermanipulator, der Tasten auf derselben Tastatur drückt). –

+0

auch Ofc, können Sie dies tun, die Rootkit Weg, Haken Sie die SendInput-API des Systems, und stellen Sie sicher, dass es nie Ihre Anwendung berührt. Sie könnten sogar ein Userland-Rootkit dafür verwenden, indem Sie jeden anderen Userland-Prozess 'SendInput' anhängen. – hanshenrik