有没有办法检测Windows上的模拟键盘/鼠标输入。例如,用户在键盘上键入内容,而不是sendKeys / PostMessage /屏幕键盘。有没有办法可以区分这两者?
编辑:也许一个例子会有所帮助。我正在制作游戏,想要区分真实输入和WinAPI合成键盘/鼠标消息。
答案 0 :(得分:4)
我可能错了,但屏幕键盘(以及模拟用户输入的其他应用程序)很可能使用SendInput API:
SendInput在输入堆栈的底层运行。它只是键盘和鼠标驱动程序用来告诉窗口管理器用户已生成输入的相同输入机制的后门。 资料来源:http://blogs.msdn.com/b/oldnewthing/archive/2010/12/21/10107494.aspx
因此,可能无法判断输入是否来自“真正的”键盘。
答案 1 :(得分:2)
区分“真实”输入和“模拟”输入(假设它是由keybd_event()
/ mouse_event()
或SendInput()
生成的唯一方法是使用低级输入通过SetWindowsHookEx()
的键盘/鼠标钩。 WH_KEYBOARD_LL
和WH_MOUSE_LL
钩子回调为模拟输入提供INJECTED
标志。
答案 2 :(得分:1)
从Windows 8开始,有GetCurrentInputMessageSource
功能。您可以使用它,并检查originId
枚举的以下值:
IMO_INJECTED
-输入消息已通过未将 UIAccess 属性设置为SendInput
的应用程序注入(通过TRUE
函数)在其清单文件中。