代码之家  ›  专栏  ›  技术社区  ›  Andy

在Windows 10上将DirectInput与XBOX One控制器和window focus配合使用

  •  3
  • Andy  · 技术社区  · 6 年前

    我正在尝试使用DirectInput捕获XBOX One控制器的输入信号。我将它绑定到一个C#WinForms应用程序。我面临的问题是:当表单有焦点时,它可以很好地捕获输入。当窗口失去焦点时,我没有得到任何反馈。 在Windows 7上,这不是问题。

    我在Windows 10上尝试了其他控制器:PS4、Logitech、方向盘等。。。一切都按预期进行:当窗口失去焦点时,我仍能得到反馈。这只是Windows 10上的XBOX One控制器。

    我想可能跟这句台词有关:

    dev.SetCooperativeLevel(_ctlParent, CooperativeLevel.Background | CooperativeLevel.Nonexclusive);
    

    但是,即使我把这句话去掉,一切都是一样的。

    XBOX One控制器似乎忽略了 CooperativeLevel.Background 标记并添加 CooperativeLevel.Foreground 旗帜这里是 some more info 关于旗帜。

    是否还有其他熟悉此问题的人找到了解决方法?

    2 回复  |  直到 6 年前
        1
  •  3
  •   supersmo    5 年前

    关于XBox One控制器,我一直在探索这一点。对于XBox One和XBox360控制器,每个API都有自己的限制。

    以下是我所学内容的总结:

    窗户。游戏。输入 ref

    无限制(?)Windows 10上的控制器数。
    (直到最近,我还以为限制是8,但我已经用9个XBox 360/XBox One控制器进行了测试,因此DirectXTK中的MAX\u PLAYER\u NUMBER=8并不是根据Windows 10的实际限制设置的。 ref )

    限制:

    • 无法在后台访问控制器。。。
      (虽然不是百分之百确定。我自己还没有让控制器在后台工作,文档显示UWP应用程序存在这种限制。 ref )
    • 仅适用于UWP设备(如Windows 10、Xbox One、Windows平板电脑等)
    • Gamepad类仅支持Xbox One认证或Xbox 360兼容的Gamepad( ref ),可以通过RawGameController类访问其他游戏板( ref ).

    XInput ref

    用于访问4个XInput兼容控制器(如XBox 360或XBox One控制器)的API

    • XInput控制器可以在后台访问。

    限制:

    • 最多4个控制器。
    • 仅支持XInput的设备。
    • 无法激活XBox One控制器触发器中额外的2个隆隆马达。(使用Windows.Gaming.Input进行此操作。)

    直接输入 ref

    这些API中最古老的。
    控制器数量不限(?)

    限制:

    • 无法在后台访问XBox One控制器。(Bug或功能?)
    • XBox 360和XBox One控制器在同一轴上有触发器,没有导向按钮,也没有隆隆声。
    • Windows应用商店应用程序无法使用DirectInput。 ref
    • Microsoft不再建议使用DirectInput。 裁判

    原始输入 ref

    控制器数量不限(缺少参考。使用9个控制器进行测试。)

    • XBox One和其他控制器可以在后台访问。
      (请使用以下源代码进行尝试: ref )

    限制:

    • XBox 360和XBox One控制器在同一轴上有触发器,没有导向按钮,可能没有隆隆声。(使用此源代码进行测试 裁判 )
        2
  •  1
  •   Chuck Walbourn    6 年前

    Xbox 360 Common Controller和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 .