我对SlimDX有一个好奇的问题:我们已经在Windows 7上看到了这个问题,并且还没有testing其他版本:我正在使用一捆便宜的USB游戏手柄(没有序列号),有时候一个物理游戏手柄结束向多个Joystick对象提供input。
该场景是:
将游戏手柄1插入到集线器插槽1. Pad在DirectInput.GetDevices显示为GUID f17b2d30。 为平板创buildJoystick对象。
将游戏手柄2插入到插槽2中。Pad作为GUID 5187d2d0出现在DirectInput.GetDevices中。 为平板创buildJoystick对象。
按下游戏手柄2上的button。不改变状态。
按下游戏手柄1上的button。在两个对象上的Poll()之后,button出现在GetCurrentState() 。
拔下游戏手柄2.其对象上的Poll()方法继续无误地返回,但不再出现在DirectInput.GetDevices 。
按下游戏手柄1上的button。在两个对象上的Poll()之后,button出现在GetCurrentState() 。
我已经在debugging器中检查了对象。 每个Joystick通过information.InstanceGUID引用正确的GUID,但在Properties.InterfacePath每个都有相同的USBpath。
游戏手柄硬件似乎正常工作 – 如果我使用控制面板游戏手柄testing仪执行相同的操作,游戏手柄保持不同。
有Robocopy的API包装吗?
在.NET中的远程机器上获取环境variables的真实值
通过远程桌面提高WPF应用程序的速度?
如何将aspnet_compiler更新到4.6.1?
DirectInput GUID似乎是基于USB PID和VID分配的,然后是相同的游戏手柄插入的顺序,而不是它们插入的USB端口的物理path。 如果我混合使用不同型号的游戏手柄,问题就会消失。
这感觉就像一个SlimDX甚至是一个DirectInput的错误 – 有没有解决这个问题的方法?
与Windows服务运行UI
OraOLEDB.Oracle提供者未在本地机器上注册
从.Net的angular度来看windows服务的体系结构
Perfmon,PerfMonitor和PerfView
如何从PowerShell中访问Web服务?
我的最终答案是完全放弃DirectInput,然后转到RawInput。 我实现了一个小的C DLL来连接我的C#代码和RawInput。
我有两个限制: 在XP下 查找设备名称和崩溃读取设备信息 。 这些都不是我的应用程序的关键问题。
从C#调用使用这些签名:
[DllImport("Adapters.dll",CallingConvention = CallingConvention.Cdecl)] private static extern int InitialiseGamepads(IntPtr hwnd); [DllImport("Adapters.dll",CallingConvention = CallingConvention.Cdecl)] private static extern IntPtr GetDevicePath(int index); [DllImport("Adapters.dll",CallingConvention = CallingConvention.Cdecl)] private static extern int PollDeviceChange(); [DllImport("Adapters.dll",CallingConvention = CallingConvention.Cdecl)] private static extern int ProcessInput(IntPtr wParam,IntPtr lParam,out byte buttons,out int x,out int y);
我想,你应该使用:
Joystick joy; string UniquePathForEachJoystick = joy.Properties.InterfacePath.ToString();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。