2010-12-29 10 views
1

Есть ли способ обнаружить имитируемый ввод клавиатуры/мыши в Windows. Например, пользователь набирает что-то на клавиатуре или на клавиатуре sendKeys/PostMessage/On-screen. Есть ли способ, чтобы я мог различать эти два?Обнаружение имитации ввода клавиатуры/мыши

EDIT: Возможно, пример поможет. Я делаю игру и хочу отличить реальный ввод от WinAPI, синтезирующий сообщения клавиатуры/мыши.

+0

Это довольно забавный вопрос, потому что, если бы ответ был да, я могу почти увидеть, как кто-то спрашивает: как вы препятствуете приложениям обнаруживать синтезированный вход? – Mehrdad

+0

Да, естественно ... – Dave

+0

@ Ламберт: Это очень просто, до сих пор у меня есть пять ответов. (A) драйвер виртуальной клавиатуры (B) виртуальная машина (C) Генератор нажатия клавиш PS/2 (D) (клавиша нажатия клавиш) на клавиатуре «реального» (E) [качка] (http://video.google.com/videoplay? docid = -5503582578132361295) –

ответ

4

Я могу ошибаться, но на экранной клавиатуре (и другие приложения, которые имитируют ввод данных пользователем), скорее всего, использует API SendInput:

SendInput работает на нижнем уровне стека ввода. Это просто бэкдор в тот же механизм ввода, что и драйверы клавиатуры и мыши, чтобы сообщить диспетчеру окна, что пользователь создал ввод. Источник: http://blogs.msdn.com/b/oldnewthing/archive/2010/12/21/10107494.aspx

Так что, вероятно, нет способа узнать, является ли ввод исходит от «реальной» клавиатуры или нет.

+3

«с реальной клавиатуры» даже не достаточно. Дэйв хотел узнать, набирает ли он его клавиатуру (а не, я полагаю, робот-манипулятор, нажимающий клавиши на той же клавиатуре). –

+0

также из cc, вы можете сделать это руткит-способом, подключить API-интерфейс SendInput и убедиться, что он никогда не касается вашего приложения. вы могли бы даже использовать руткит userland для этого, подключив каждый другой пользовательский процесс «SendInput». – hanshenrik

Смежные вопросы