我正在尝试使用DirectInput来捕获XBOX One控制器输入信号。我将它绑定到C#WinForms应用程序。我遇到的问题是:当表单具有焦点时,它会很好地捕获输入。当窗口失去焦点时,我得不到任何反馈。 在Windows 7上,这不是问题。
我在Windows 10上尝试过其他控制器:PS4,罗技,方向盘等......一切都按预期工作:当窗口失去焦点时,我仍然得到反馈。它只是Windows 10上的XBOX One控制器。
我想也许这与这一行有关:
dev.SetCooperativeLevel(_ctlParent, CooperativeLevel.Background | CooperativeLevel.Nonexclusive);
但是,即使我把这条线拿出来,一切仍然是一样的。
似乎XBOX One控制器忽略CooperativeLevel.Background
标志并添加CooperativeLevel.Foreground
标志。这是关于旗帜的some more info。
有没有其他人熟悉这个问题已经找到了解决方法?
答案 0 :(得分:1)
Xbox 360公共控制器和Xbox One控制器的驱动程序都模拟“HID”,用于旧游戏的旧版DirectInput API,但仿真往往会有类似这样的怪癖。
可能最好的解决方案是将XINPUT用于这些控制器,并且只回退到传统HID控制器的DirectInput。对于Windows 10 DirectX 12 / UWP应用程序,您也可以直接使用Windows.Gaming.Input
。
请参阅XINPUT and Windows 8和DirectX Tool Kit: Now with GamePads。
答案 1 :(得分:0)
我本人就XBox One控制器进行了探索。对于XBox One和XBox360控制器,每个API都有其自身的限制。
以下是我所学的摘要:
Windows.Gaming.Input ref
Windows 10上的无限(?)个控制器。
(直到最近我一直认为限制为8,但是我已经使用9个XBox 360 / XBox One控制器进行了测试,因此DirectXTK中发现的MAX_PLAYER_NUMBER = 8并未根据Windows 10的实际限制进行设置。ref)>
限制:
XInput ref
用于访问4个XInput兼容控制器(例如XBox 360或XBox One控制器)的API
限制:
DirectInput ref
这些API中最古老的。
无限数量的控制器(?)
限制:
原始输入 ref
数量不限的控制器(缺少参考。已通过9个控制器测试。)
限制: