问题:
我正在开发一个 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 读取输入。 (如果我也可以发送输出那就更好了)
PlayStation 控制器,尤其是 DualShock 4,通常与 DirectInput 存在兼容性问题,因为它们不像 Xbox 控制器那样受到 Windows 原生支持。以下是一些排除故障并可能解决您的问题的建议:
使用 RawInput 而不是 DirectInput:
检查设备类型:
DeviceType.Gamepad
。 PlayStation 控制器有时被识别为 DeviceType.Joystick
而不是 DeviceType.Gamepad
。尝试在代码中更改此设置,看看是否会产生影响。使用 DS4Windows API 或 ViGEmBus:
确保控制器处于独占模式:
检查驱动程序问题:
由于缺乏本机支持,在 Windows 环境中处理 PlayStation 控制器可能会很棘手,并且通常需要模拟 Xbox 控制器等解决方法。