区分键盘的实际按键和虚拟按键的区别

3
我正在用C#编写一个程序,需要模拟键盘按键命令。
问题是 - 我需要模拟“真实”的键盘按钮点击,而不是虚假的。例如,据我所知:
当用户按下键盘上的任何按钮时 - 信号通过USB发送,然后通过键盘驱动程序进行处理。
当使用API(SendInput、SendKeys、KeyBoardEvent或其他)时 - 我们绕过了USB和驱动程序,因此基本上这些类型的按键可以通过全局挂钩方法跟踪。
如何模拟真实的键盘按键?
我不懂C++,因此编写自定义驱动程序不是一个选项。
我不介意使用微控制器或任何其他的硬件“解决方案”,只要它便宜。
也许可以通过USB电缆连接两台PC,以便从PC2向PC1发送真实的键盘按钮按压信号?
那么方法是什么?

我不明白你在这里的意思。如果你准备采用硬件解决方案,那不就是一个键盘吗? - David Heffernan
使用SendInput()注入的键盘事件与由驱动程序生成的键盘事件无法区分。因此,它模拟真实的按键操作,任何方式都无法区别。 - Hans Passant
那么在无法检测到关键输入的情况下,究竟有哪些选项可供选择呢? - user10478
题外话,但是...你在做某种游戏的机器人吗? :P - Tivie
@Tivie 是的,针对扑克游戏。没有成功... - Alex
显示剩余3条评论
1个回答

7
你可以使用全局键盘钩子(WH_KEYBOARD_LL)来识别使用SendInput()发送的键盘事件。它的回调方法LowLevelKeyboardProcKBDLLHOOKSTRUCT作为参数接收。
如果KBDLLHOOKSTRUCT.flags中设置了LLKHF_INJECTED标志,则表示该键盘事件是使用SendInput()注入的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接