2011-08-21 32 views
12

这里是我的情况:我们正在编写一个应用程序,它必须将Microsoft Kinect坐标转换为键盘和鼠标事件。将键盘事件发送到C#中的另一个不处理Windows事件的应用程序

当我们需要控制鼠标时,所有的应用程序中的一切都按照我们的意图工作。例如,当我们需要将键盘事件(如按键或按键)发送到不处理Windows事件的应用程序时(例如游戏),就会出现问题。

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

+1

你说的DirectInput ? – SLaks

+0

我不知道,我是C#noob :) –

+0

是的DirectInput将是应用程序不“正常”的原因。 –

回答

3

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

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


this thread参见有关GameDev.net现场,如果有人已与一些可以具体地遇到了一个基于DirectInput的应用程序交互的“磨合”问题的工作。

+1

已经尝试过,没有工作。 :( 这就是为什么我在这个问题上开了一个赏金 –

+0

@Kico - 根据Gamedev.net线程我联系,你必须发送扫描码,而不是虚拟键,你已尝试 –

0

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

InputSimulator

+0

Alrady试过:( 工作正常“传统”的Windows应用程序,但是当向诸如“Half-Life”或“Doom”等应用程序发送输入时,它不起作用。 –

2

不幸的是,DirectX没有内置挂钩功能;但有aresome(这是一个.Net包装另一个)libraries那里可以做到这一点。您还需要查看否认DirectInput的XInput。

+0

我是否需要改变?目标应用程序的代码? –

+1

不,这种钩子形式的想法是,您可以在自己的代码创建对象AT RUNTIME之前将自己的代码注入到应用程序中,这个新代码将导致创建自己的对象。这就是为什么它是在C/++(但有一个.NET包装有)。 还记得,这种类型的挂钩将使作弊显示器(如朋克巴斯特)去绝对疯狂。 –

相关问题