【发布时间】:2016-05-24 10:55:48
【问题描述】:
有没有办法在 Windows 上运行的桌面应用程序中确定键盘或鼠标事件是否由硬件触发,而不是由 TeamViewer、Steam 或其他远程桌面软件等应用程序触发?
我的目的不是防止机器人,而是防止远程访问应用程序。
RawInput API 似乎让我可以检测使用 SendInput API 发送的虚假事件。对吗?
【问题讨论】:
-
您的横向问题(原始输入)未在您的问题已作为重复项关闭的帖子中讨论。如果您希望它得到回答(如果它还没有在其他地方)尝试只询问它。
-
重复问题的答案没有涵盖另一种可能的检测途径 - 来自
SetWindowsHookEx()do 的低级键盘/鼠标挂钩报告输入是真实的还是模拟的。 AFAIK,原始输入 API 不。 -
@Remy -
GetRawInputDeviceInfo的旧文档有一个关于“hDevice”的注释:“原始输入设备的句柄。[...] 如果应用程序,它也可以为 NULL插入输入数据,例如,通过使用 SendInput。"。可以在例如 XE2 的 api 文档中找到它。这个注释现在从文档中删除了,我不知道为什么,但GetRawInputDeviceInfo通常应该能够分辨出来。 -
我重新打开了这个问题。标记副本中的 cmets 和答案,不知何故,在我看来,他们都以一种相当迂回的方式解决了这个问题。
标签: windows delphi remote-desktop keyevent raw-input