hck*_*ckr 2 windows delphi remote-desktop keyevent raw-input
有没有一种方法可以确定键盘或鼠标事件是从硬件而不是由Windows上运行的桌面应用程序中的TeamViewer,Steam或其他远程桌面软件之类的应用程序触发的?
我的目的不是阻止机器人,而是阻止对应用程序的远程访问。
似乎RawInput API可以让我检测使用SendInput API发送的虚假事件。这是对的吗?
SetWindowsHookEx()如果输入是由实际设备生成或由应用程序代码注入的,则报告提供的低级键盘/鼠标挂钩。
对于低级键盘钩子,该钩子提供了指向KBDLLHOOKSTRUCT结构的指针,该结构的flags成员包含LLKHF_INJECTED用于假输入的标志。
对于低级鼠标钩子,该钩子提供了指向MSLLHOOKSTRUCT结构的指针,该结构的flags成员包含用于假输入的a LLMHF_INJECTED或LLMHF_LOWER_IL_INJECTED标志。
每个钩子都可以返回非零值,以阻止输入传递到钩子链的其余部分,进而传递到目标窗口。
关于原始输入API,根据(旧版本的 1)为文档GetRawInputDeviceInfo()功能:
hDevice [in,可选]
类型:HANDLE原始输入设备的句柄。这来自WM_INPUT消息的lParam,来自RAWINPUTHEADER的hDevice成员或来自GetRawInputDeviceList。如果应用程序例如通过使用SendInput插入输入数据,则它也可以为NULL。
1:突出显示的注释已在当前版本的文档中删除,我不知道为什么。
因此,对于假输入,消息hDevice报告的WM_INPUTNULL将为NULL。
但是,无法使用Raw Input API阻止输入。您仍然需要一个低级钩子。