12

这是我的情况:我们正在编写一个必须将 Microsoft Kinect 坐标转换为键盘和鼠标事件的应用程序。

当我们需要控制鼠标时,在任何类型的应用程序中,一切都按照我们的预期工作。当我们需要向不处理 Windows 事件的应用程序(例如游戏)发送键盘事件(例如按下或按下)时,就会出现问题。

我们尝试了 .net 框架的 SendKeys 类,它只适用于 Windows 应用程序。当应用程序是半条命或末日之类的游戏时,我们无法获得相同的效果。所以,这是我的问题:我们如何有效地将键盘事件发送到这些其他应用程序?

4

5 回答 5

3

您需要使用SendInput模拟输入。SendMessage 和 SendKeys 倾向于在 Windows 消息级别上工作 - 但 DirectX 应用程序不运行传统的消息循环。

PInvoke.NET上有一个页面,但我必须承认,我没有尝试使用它。


另请参阅GameDev.net 站点上的此线程,其中有人处理过一些在与基于 DirectInput 的应用程序交互时可能遇到的“萌芽”问题。

于 2011-08-23T13:25:55.513 回答
2

不幸的是 DirectX 没有内置的挂钩功能。但是有一些 这个是另一个的.Net 包装器)可以做到这一点。您还需要查看弃用 DirectInput 的 XInput。

于 2011-08-23T13:26:11.723 回答
1

我认为以下帖子应该可以回答您的问题,

如何使用全局键盘挂钩发送键?

根据答案,您必须对 SendInput 函数使用以下键码, http: //www.gamespp.com/directx/directInputKeyboardScanCodes.html

于 2011-08-28T17:36:17.197 回答
0

您需要 pInvoke Winapi 发送消息。

http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx

http://pinvoke.net/default.aspx/user32.SendMessage

这就是我正在使用的。它有效,但您必须阅读一些有关它的信息。这是非常强大的方法。

于 2011-08-23T07:38:23.867 回答
0

这是我正在使用的快速简便的解决方案。效果很好。

输入模拟器

于 2011-08-23T08:32:34.307 回答