将键盘事件发送到C#中另一个不处理Windows事件的应用程序

时间:2011-08-21 02:49:35

标签: c# events mouse keyboard-events kinect

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

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

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

5 个答案:

答案 0 :(得分:3)

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

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


另请参阅GameDev.net网站上的this thread,其中有人处理了与基于DirectInput的应用程序交互时可能遇到的一些“问题”。

答案 1 :(得分:2)

不幸的是,DirectX没有内置挂钩功能;但是有are some(这个是.Net包装器而不是另一个)libraries可以做到这一点。您还需要查看XInput,它不赞成使用DirectInput。

答案 2 :(得分:1)

我认为以下帖子应该是你问题的答案,

How do i send keys using a global keyboard hook?

根据答案,你必须使用以下密钥代码到SendInput函数, http://www.gamespp.com/directx/directInputKeyboardScanCodes.html

答案 3 :(得分:0)

你需要pInvoke Winapi sendmessage。

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

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

这就是我正在使用的。它有效,但你必须阅读一点。这是非常强大的方法。

答案 4 :(得分:0)

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

InputSimulator