在 C# 中使用 SharpDX 检测 PlayStation 控制器时出现问题

问题描述 投票:0回答:1

问题:

我正在开发一个 C# 应用程序,以使用 SharpDX 和 DirectInput 检测和处理来自 PlayStation 控制器的输入。然而,我编写的代码似乎没有检测到任何控制器,即使我确信控制器已连接并且工作正常(使用 DS4Windows 进行测试)。

代码:

            var directInput = new DirectInput();
            var devices = directInput.GetDevices(DeviceType.Gamepad, DeviceEnumerationFlags.AllDevices);
            foreach (var deviceInstance in devices)
            {
                MessageBox.Show("Device: " + deviceInstance.InstanceName);
            }
            var joystick = new Joystick(directInput, devices[0].InstanceGuid);
            joystick.Acquire();
            while (true)
            {
                joystick.Poll();
                var data = joystick.GetBufferedData();

                foreach (var state in data)
                {
                    MessageBox.Show(state.Value.ToString());
                }
            }

观察结果:

我已验证 DS4Windows 可以识别 PlayStation 控制器。 运行提供的代码时,应用程序未检测到任何控制器。

我尝试过的:

运行应用程序之前关闭 DS4Windows。 使用管理权限运行应用程序。 检查 DS4Windows 中的独占设置。 将 SharpDX 更新到最新版本。

编辑:

我愿意使用任何方法从 Dualshock 读取输入。 (如果我也可以发送输出那就更好了)

c# controller sharpdx playstation
1个回答
0
投票

PlayStation 控制器,尤其是 DualShock 4,通常与 DirectInput 存在兼容性问题,因为它们不像 Xbox 控制器那样受到 Windows 原生支持。以下是一些排除故障并可能解决您的问题的建议:

  1. 使用 RawInput 而不是 DirectInput:

    • RawInput 通常比 DirectInput 更好地支持 PlayStation 控制器。您可能需要切换方法并使用 RawInput API 来检测和读取控制器的输入。
  2. 检查设备类型:

    • 在当前代码中,您正在使用
      DeviceType.Gamepad
      。 PlayStation 控制器有时被识别为
      DeviceType.Joystick
      而不是
      DeviceType.Gamepad
      。尝试在代码中更改此设置,看看是否会产生影响。
  3. 使用 DS4Windows API 或 ViGEmBus:

    • DS4Windows 的工作原理是将 PlayStation 控制器输入转换为 Xbox 控制器输入,这样更容易被 Windows 识别。您可以考虑直接在应用程序中使用 DS4Windows API,或使用 ViGEmBus(一种虚拟游戏手柄模拟总线),它可用于模拟 Xbox 控制器并可能提供更好的兼容性。
  4. 确保控制器处于独占模式:

    • 有时,为了正确识别 PlayStation 控制器,它需要处于独占模式。确保 DS4Windows 或任何其他软件在独占模式下正确配置控制器。
  5. 检查驱动程序问题:

    • 可能存在与驱动程序相关的问题,导致无法正确检测控制器。确保控制器的驱动程序是最新的,并且设备管理器中没有冲突。

由于缺乏本机支持,在 Windows 环境中处理 PlayStation 控制器可能会很棘手,并且通常需要模拟 Xbox 控制器等解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.