【发布时间】:2012-02-04 08:00:33
【问题描述】:
我正在编写一个应用程序(在 C# 中),作为它的一部分,它必须模拟一些击键并将其发送到另一个应用程序。我正在使用http://inputsimulator.codeplex.com/ 项目来模拟按键,它适用于许多应用程序,但在某些应用程序中却不能——例如 Mortal Combat 4。
我用谷歌搜索过,发现很多答案从“不可能”到“你必须使用 XXX 库”等等。这些答案让我很害怕,甚至几乎确信我无法做到那个时候,但是……
M$ 虚拟键盘有效。它适用于所有应用程序。所以这是可能的......你们中的任何人,聪明的人,知道我怎样才能做到这一点吗?
【问题讨论】:
-
到目前为止,您实际上有哪些代码可以尝试......?
-
我正在使用我上面提到的项目。最低的方法是 [DllImport("user32.dll", SetLastError = true)] internal static extern UInt32 SendInput(UInt32 numberOfInputs, InputMsg[] inputs, Int32 sizeOfInputStructure);它在许多应用程序中都能完美运行,但不是全部。 ://
-
@FenixVoltres:我对 Windows 屏幕键盘进行了逆向工程,它使用与您链接到的库相同的输入法 (
SendInput)。我挂钩了所有想到的与键盘相关的函数(keybd_event、SendInput、SetKeyboardState等),唯一被调用的函数是SendInput)。尝试根据 MSDN 文档仔细检查库的代码。 -
哇,尊重。 :) 好的,所以这确保了我这是可能的。不过,奇怪的是它不起作用。我什至会尝试三遍阅读所有关于此的文档。也许是一些不直接与键盘连接的事情,例如对焦?我没有在任何地方设置任何焦点(但它适用于某些应用程序)。
-
一开始是想反汇编OSK,hook所有键盘相关的功能;我决定使用 API Monitor (rohitab.com/apimonitor) 监控程序执行会更容易,因为只有少数函数能够以这种方式产生输入。您应该记录上面的那些函数,以及与扫描码相关的任何函数(它们应该属于同一类别)。
标签: c# windows input keyboard simulation