2012-04-26 299 views
0

我正在用C#编写一个程序,它必须模拟键盘的按键命令。区分键盘的真实和虚拟按键

问题是 - 我需要模拟“逼真”的键盘按钮点击,而不是假的。例如,据我的理解:

  • 当用户按下键盘上的任意键

    - 上的信号通过USB发送,然后通过键盘的驱动程序进行。

  • 时API的使用(SendInput,任何的SendKeys,的KeyboardEvent,或) - 我们绕过USB和驱动程序,所以基本上这几样印刷机可以通过全局钩子的方法来跟踪..

如何你模拟真实的按键?

  • 我没有C++知识,所以编写自定义驱动程序不是一种选择。

  • 我不介意使用微控制器或任何其他硬件“解决方案”,只要它的价格便宜..

  • 也许是可能的PC通过USB线连接两台发送现实的键盘按钮的用途按下从PC2到PC1的信号?

那么这是什么方法?

+0

我无法理解你在这里的意思。如果您准备好有硬件解决方案,是不是只是一个键盘? – 2012-04-26 21:17:36

+0

使用SendInput()注入的键盘事件与驱动程序生成的键盘事件无法区分。所以它模拟了现实的按键,无法通过任何方式或手段来区分差异。 – 2012-04-27 00:19:54

+0

DavidHeffernan我需要能够远程控制一台PC的键盘 - 从另一台(通过局域网,更精确)。所有按键都将由软件(C#WinForms)生成,而不是硬件(即键盘)。无论如何, @HansPassant你百分百肯定吗?因为如果这就是事实 - 我建议你把这个评论写成我的问题的“答案”。我会很乐意接受它。 – Alex 2012-04-27 07:01:50

回答

2

您可以通过全局键盘钩子(WH_KEYBOARD_LL)来识别与SendInput()一起发送的键盘事件。 它的回调方法LowLevelKeyboardProc收到KBDLLHOOKSTRUCT作为参数。

如果在KBDLLHOOKSTRUCT.flags键盘事件中使用SendInput()注入了LLKHF_INJECTED标志。