我一直在针对Kinect进行编程,现在我想让游戏对我在Kinect上所做的事情有所反应。将数据发送到记事本以进行按键操作确实很容易,但是将其发送到游戏则更加困难。
首先,我一直在使用Kinect的WPF Skeleton示例,现在将其构建。我可以使用C++版本,但我的C++非常使用rust ,我不愿意使用。
所以这是我到目前为止所做的,我尝试了SendKeys
,SendInput
,keybd_event
和Post_Message
。这些都没有像《倦怠天堂》这样的游戏出现。
我知道GlovePIE输入可以进入游戏,但是如何?目前,我的解决方法是使用PPJoy,它具有C++中的示例代码来模拟按钮按下。我通过WPF应用程序中的[DllImport]调用此方法。然后,我拿起GlovePIE中的操纵杆按钮,并将其转换为键盘键。因此,我绕了一个圈,可以正常工作,但PPJoys驱动程序未签名,因此我无法真正共享此代码,因为人们必须允许测试签名的驱动程序。
有谁知道GlovePIE如何进行按键操作?我已经在GlovePIE论坛上发布了,但没有回复。 GlovePIE可以与旧的openNI kinect驱动程序配合使用,但是我使用的是几周前最近发布的标准Microsoft版本。
最佳答案
好的,不确定如何回答您自己的问题,但是我想出了完整的解决方案,并希望将其作为“已核对答案”进行分享。
首先包括此using语句
using System.Runtime.InteropServices;
然后把这个放在你的类
[DllImport("user32.dll", EntryPoint = "keybd_event", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern void Keybd_event(byte vk, byte scan, int flags, int extrainfo);
这将导入C方法以在C#中使用。
现在,某些游戏/应用程序使用虚拟键VKey,而某些游戏(Direct X也称为DIKey)使用扫描代码。我的问题是我不正确地使用了扫描代码,因此它不适用于某些游戏。我建议,如果您不知道什么应用程序要使用这些,请使用虚拟键两次调用它,使用直接输入键两次调用它。
这是使用虚拟键然后使用直接输入键两次调用字母“A”的示例。
KEYDOWN = 0
KEYUP = 2
//Virtual Key
Keybd_event(65, 0, KEYDOWN, 0);
//Direct Input Key
Keybd_event(0, 30, KEYDOWN, 0);
可以看出A的值从VK到DIK是不同的
这两个链接都与HEX值相关,而我上面的示例显示了Base 10(整数)
VKeys链接http://delphi.about.com/od/objectpascalide/l/blvkc.htm
DIKeys链接http://community.bistudio.com/wiki/DIK_KeyCodes
这也应该适用于SendInput,但我尚未完全验证。
关于c# - 像GlovePIE一样伪造输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8216582/