C# 区分键盘和#x27;真实按键和虚拟按键
我正在用C#编写一个程序,它必须模拟键盘上的按键命令 问题是-我需要模拟“真实”的键盘按钮点击,而不是假点击。例如,据我所知:C# 区分键盘和#x27;真实按键和虚拟按键,c#,keyboard,keypress,C#,Keyboard,Keypress,我正在用C#编写一个程序,它必须模拟键盘上的按键命令 问题是-我需要模拟“真实”的键盘按钮点击,而不是假点击。例如,据我所知: 当用户按下键盘上的任何按钮时,信号通过USB发送,然后通过键盘驱动程序继续 当使用API时(SendInput、SendKeys、KeyBoardEvent或其他),我们绕过USB和驱动程序,因此基本上可以通过全局钩子方法跟踪这些类型的按键 如何模拟真实的按键? > P>我没有C++知识,所以编写自定义驱动程序不是一个选项。 我不介意使用微控制器或任何额外的硬件
- 当用户按下键盘上的任何按钮时,信号通过USB发送,然后通过键盘驱动程序继续
- 当使用API时(SendInput、SendKeys、KeyBoardEvent或其他),我们绕过USB和驱动程序,因此基本上可以通过全局钩子方法跟踪这些类型的按键
- 我不介意使用微控制器或任何额外的硬件“解决方案”,只要它便宜
- 也许可以通过USB电缆连接两台PC,以便从PC2向PC1发送真实的键盘按钮按下信号
那么方法是什么呢?您可以通过全局键盘挂钩(WH\u keyboard\LL)识别SendInput()发送的键盘事件。 它的回调方法作为参数接收
如果在KBDLLHOOKSTRUCT.flags中设置了LLKHF_INJECTED标志,则键盘事件是通过SendInput()注入的。您可以通过全局键盘挂钩(WH_keyboard_LL)识别通过SendInput()发送的键盘事件。 它的回调方法作为参数接收
如果在KBDLLHOOKSTRUCT.flags中设置了LLKHF_INJECTED标志,则键盘事件是用SendInput()注入的。我无法理解您在这里的意思。如果您准备好了一个硬件解决方案,那不就是一个键盘吗?使用SendInput()注入的键盘事件与驱动程序生成的键盘事件是无法区分的。因此,它模拟了真实的按键操作,无法通过任何方式或方法来区分不同。DavidHeffernan我需要能够从一台电脑远程控制另一台电脑的键盘(更准确地说,是通过局域网)。所有按键都将由软件(C#WinForms)生成,而不是硬件(即键盘)。不管怎样,@HansPassant你百分之百确定吗?因为如果这是真的,我建议你写这篇评论作为对我问题的“回答”。我很乐意接受。@HansPassant-我当然不是这方面的专家,但在阅读之后,你的分析似乎并非在所有情况下都是100%正确的。我做了一些家庭作业,似乎GameGuard之类的工具可以阻止SendInput()生成的事件,所以基本上,在驾驶员层面上很容易检测到注射。我不明白你在这里的意思。如果您准备好了一个硬件解决方案,那不就是一个键盘吗?使用SendInput()注入的键盘事件与驱动程序生成的键盘事件是无法区分的。因此,它模拟了真实的按键操作,无法通过任何方式或方法来区分不同。DavidHeffernan我需要能够从一台电脑远程控制另一台电脑的键盘(更准确地说,是通过局域网)。所有按键都将由软件(C#WinForms)生成,而不是硬件(即键盘)。不管怎样,@HansPassant你百分之百确定吗?因为如果这是真的,我建议你写这篇评论作为对我问题的“回答”。我很乐意接受。@HansPassant-我当然不是这方面的专家,但在阅读之后,你的分析似乎并非在所有情况下都是100%正确的。我做了一些家庭作业,似乎GameGuard之类的工具可以阻止SendInput()生成的事件,所以基本上,在驱动程序级别上可以很容易地检测到注入。