【发布时间】:2025-12-24 08:30:11
【问题描述】:
我正在尝试使用 DirectInput 来捕获 XBOX One 控制器输入信号。我将它绑定到 C# WinForms 应用程序。我遇到的问题是:当表单具有焦点时,它可以很好地捕获输入。当窗口失去焦点时,我没有得到任何反馈。 在 Windows 7 上,这不是问题。
我在 Windows 10 上尝试过其他控制器:PS4、Logitech、Steering Wheels 等...一切正常:当窗口失去焦点时,我仍然会收到反馈。它只是 Windows 10 上的 XBOX One 控制器。
我想也许这与这条线有关:
dev.SetCooperativeLevel(_ctlParent, CooperativeLevel.Background | CooperativeLevel.Nonexclusive);
但是,即使我把那条线去掉,一切仍然是一样的。
XBOX One 控制器似乎忽略了CooperativeLevel.Background 标志并添加了CooperativeLevel.Foreground 标志。这里是 some more info 关于标志的。
是否有其他熟悉此问题并找到解决方法的人?
【问题讨论】:
-
您知道 SharpDX 使用的是旧版 DirectInput、XINPUT 还是 Windows.Gaming.Input?
-
我很确定它是 DirectInput 的包装器。我调用的 API 在调用时几乎匹配 1-for-1(我从使用 DirectInput 的 C++ 程序移植了它)
-
好的,首先要说的是,您应该在 Xbox 360 / Xbox One 游戏控制器上使用 XINPUT 或
Windows.Gaming.Input,而对于旧式 HID 控制器只能使用 DirectInput。对这些控制器的 DirectInput 支持主要用于旧游戏,因此在使用该模拟时它们会有一些怪癖。 -
@ChuckWalbourn,谢谢——我会去看看,看看这是否适用于我们的解决方案。感谢您抽出宝贵时间提供帮助。
-
嘿@ChuckWalbourn,它对我有用!如果您对 XINPUT 做出回答,我会接受。命名空间
Windows.Gaming.Input用于 UWP 应用程序,但我找到了一个 .NET 包装器 (github.com/speps/XInputDotNet)。再次感谢您的帮助。
标签: directx slimdx directinput