多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

DsHidMini 完全指南:让 DualShock 3 在 Windows 10/11 上化身标准 HID 的用户态驱动方案

DsHidMini 完全指南:让 DualShock 3 在 Windows 10/11 上化身标准 HID 的用户态驱动方案 驱动开发硬件开发【免费下载链接】DsHidMiniVirtual HID Mini-user-mode-driver for Sony DualShock 3 Controllers项目地址https://gitcode.com/gh_mirrors/ds/DsHidMini点击查看免费下载DsHidMini 是一个自包含的 Windows 用户态驱动程序UMDF 2它将 Sony DualShock 3、SIXAXIS、Navigation 手柄以及 PS1/PS2 转接器ShanWan 与 DualShock 3 身份两种呈现为可配置、符合 HID 标准的虚拟设备同时支持 USB 与蓝牙经 BthPS3双传输。本文以仓库根目录 README.md 为主线结合 driver/README.md、ControlApp/README.md、SDK/Nefarius.DsHidMini.IPC/README.md 与 XInputBridge/README.md 等仓库文档系统梳理其 HID 模式、配置体系、IPC SDK、XInput 桥接与构建方法帮助你快速上手并理解其底层实现。项目概览与定位DsHidMini 是 Windows 10/11x64 与 ARM64Windows 10 1809 及以上上的 用户态驱动由dshidmini.dll运行在用户态驱动宿主中位于系统内置mshidumdf.sysHID 类 minidriver 之下通过 User-Mode Driver Framework Reflector 与设备通信。游戏和应用程序可以通过以下任意一种接口消费控制器输入DirectInputRaw InputHID APIXInput通过可选的 XInput Bridge 代理 DLL传输层上USB 走原生协议蓝牙则通过 BthPS3v2.0.144提供不再需要旧式的 Shibari 蓝牙服务。驱动将 USB 或 BthPS3 的 I/O 翻译为所选虚拟 HID 报表格式蓝牙侧 BthPS3 负责传输。仓库按以下目录组织路径说明driver/UMDF 驱动HID 模式、USB/Bth 传输、配置、构建WDK、DMFXInputBridge/XInput 代理 DLLXInput1_3.dll扩展 API 暴露 DS3 压力数据setup/MSI 安装器WixSharp发布流程见 docs/RELEASE.mdControlApp/配置与运动查看器应用WPF、.NET 10SDK/Nefarius.DsHidMini.IPC/.NET IPC SDK输入报表、运动遥测、运行时命令DSHMC/已废弃的旧版控制工具请改用 ControlApp/docs/RD 笔记与官方文档索引核心能力六种 HID 模式驱动支持六种 HID 报表描述符对应源码目录 driver/HID/覆盖从单个手柄到Xbox 模拟的多种消费场景模式描述典型用途SDF单个自定义 Gamepad含压力感应按键PCSX2 非 Qt 版本等GPJ拆分 Gamepad Joystick 两个设备压力感应分离使用SXSSony SIXAXIS 兼容Steam、RPCS3、PCSX2 Qt 版本DS4WindowsDualShock 4 兼容DS4Windows v2.2.10 等XInputXbox One/XInput 兼容 HID现代游戏CGP单个 DirectInput 友好设备不含压力感应按键滑块轴支持有限的旧游戏见 issue #68在 IPC SDK 中这些模式以DsHidDeviceMode枚举暴露DsHidMiniDriver.cs值分别为SDF 0x01、GPJ 0x02、SXS 0x03、DS4Windows 0x04、XInput 0x05、CGP 0x06。每种模式还带各自的子配置压力暴露方式、D-pad 暴露方式、死区、轴翻转等。除模式之外驱动整体能力还包括压力感应按键、可配置的 D-pad 暴露、摇杆死区、轴翻转与按模式设置的参数Force Feedback 震动、运行时震动控制、替代震动模式、输出限速与输出去重电池感知的玩家 LED、自定义 LED 图案、运行时玩家编号与 LED 更新无线管理自动或自定义 USB 配对、配对到当前蓝牙宿主、无线断开、空闲超时、快捷断开组合键、有线 USB 关机设备能力与身份报告含对单 LED、无震动的 Navigation 手柄的特殊处理标定的运动传感器处理加速度计 单轴陀螺仪详见 docs/MOTION.md运行时配置热加载与 IPC设备状态、HID 输入报表、运动数据、配对、断开、震动、LED 命令IPC 可用根级IPCEnabled开关控制需要特别注意的是改变暴露 HID 描述符的设置需要设备重启。驱动可在启用AutoRestartOnHidModeMismatch时自动完成该重启。支持的硬件与已知边界受支持的设备DualShock 3 / SIXAXIS完整功能含运动传感器标定加速度计 单轴 yaw 陀螺仪Navigation Controller受支持#48ShanWan PS1/PS2 USB 转接器VID_2563/PID_0575按键、帽子开关、摇杆、压力与震动无 LED 与运动详见 docs/THIRD_PARTY_HID_ADAPTER.mdDS3 身份的 PS1/PS2 USB 转接器VID_054C/PID_0268bMaxPacketSize0 8Ejoyous 及转售固件DS3 协议与震动无 LED、运动、蓝牙详见 docs/DS3_IDENTITY_ADAPTER.md不支持与兼容性注意PlayStation Move Motion Controller 不在范围内无线 Xbox 360 Microsoft 接收器场景下多个无线手柄表现为单一设备实例逐手柄的到达/移除通知可能不正常行为不保证见 XInputBridge/README.md 的已知限制兼容性目标包括 PCSX2、RPCS3、DS4Windowsv2.2.10、RetroArch、x360ce、Dolphin、DuckStation驱动配置体系DsHidMini.json驱动的配置位于%ProgramData%\DsHidMini\DsHidMini.json包含全局设置与按设备设置并在运行时支持热重载。配置解析使用仓库内的 cJSONConfiguration.c / Configuration.Json.c 实现默认值、校验、覆盖与运行时重载。注意修改会改变 HID 描述符的设置如 HID 模式需要设备重启生效启用AutoRestartOnHidModeMismatch可让驱动自动处理。仓库自带一份实际可用的示例配置 driver/DsHidMini.json其结构与核心参数如下默认值以该文件为准根级与全局设置配置项示例值说明IPCEnabledtrue驱动级 IPC 开关ControlApp 的启用驱动 IPC选项会持久化此标志驱动运行时可热应用Global.HidDeviceModeDS4Windows全局默认 HID 模式Global.AutoRestartOnHidModeMismatchtrue当驱动加载的 HID 模式与 Windows 已探测的模式不匹配时自动重启设备Global.DevicePairingModeAuto蓝牙配对模式Global.BluetoothOutputReportTransportControl蓝牙输出报表传输方式Global.IsOutputRateControlEnabledtrue输出限速开关Global.OutputRateControlPeriodMs150输出限速周期毫秒Global.IsOutputDeduplicatorEnabledfalse输出去重开关Global.WirelessIdleTimeoutPeriodMs300000无线空闲超时毫秒默认 5 分钟Global.QuickDisconnectCombo见下快捷断开组合键QuickDisconnectCombo快捷断开组合的默认配置为IsEnabled: true、HoldTime: 1000按住 1 秒、Button1: 16、Button2: 11、Button3: 10即L1 R1 PS长按 1 秒断开。按模式SDF/GPJ/SXS/DS4Windows/XInput的子设置每种模式都有独立的配置块包括配置块关键字段默认值说明DeadZoneLeft/DeadZoneRightApply/PolarValuetrue/10.0摇杆死区DS4Windows 模式默认Apply: falseRumbleSettings.DisableLeft/DisableRight布尔false禁用左/右马达RumbleSettings.HeavyRescaleIsEnabled/RescaleMinRange/RescaleMaxRangetrue/64/255重马达左马达重映射范围RumbleSettings.AlternativeModeIsEnabled/RescaleMinRange/RescaleMaxRangefalse/1/110替代震动模式含ForcedRight重/轻阈值默认HeavyThreshold: 242与ToggleCombo组合键切换LEDSettings.Mode枚举BatteryIndicatorPlayerIndexLED 模式电池指示 玩家编号、充电动画、自定义静态/闪烁图案、应用控制输出等LEDSettings.Authority枚举AutomaticLED 控制权Automatic/ 应用 / 驱动LEDSettings.CustomPatternsLEDFlags 4 个玩家图案LEDFlags: 2自定义 LED 图案每个玩家图案含TotalDuration、BasePortionDuration、OffPortionMultiplier、OnPortionMultiplierFlipAxisLeftX/LeftY/RightX/RightY全false轴翻转SDF 模式特有PressureExposureMode枚举Default压力感应暴露方式SDF/GPJ 特有DPadExposureMode枚举Default/IndividualButtons/HATD-pad 暴露方式SDF/GPJ 特有按设备覆盖配置文件的Devices段以设备标识为键如44D832809FCD覆盖全局设置示例设备配置只覆盖HidDeviceMode、DevicePairingMode、输出控制与空闲超时并针对该设备分别指定 SDF/GPJ 下的DPadExposureModeDevices: { 44D832809FCD: { HidDeviceMode: SDF, DevicePairingMode: Auto, IsOutputRateControlEnabled: true, OutputRateControlPeriodMs: 150, IsOutputDeduplicatorEnabled: false, WirelessIdleTimeoutPeriodMs: 300000, SDF: { PressureExposureMode: Default, DPadExposureMode: IndividualButtons }, GPJ: { PressureExposureMode: Default, DPadExposureMode: IndividualButtons } } }从源码结构看Configuration.h配置文件名与目录固定为%ProgramData%\DsHidMini\DsHidMini.jsonCONFIG_ENV_VAR_NAMEProgramData、CONFIG_SUB_DIR_NAMEDsHidMini、CONFIG_FILE_NAMEDsHidMini.json驱动通过ConfigLoadForDevice在设备上下文中加载配置并支持IsHotReload运行时热重载ConfigLoadIpcEnabled单独读取IPCEnabled门控缺失文件或属性时默认Enabled TRUE。ControlApp官方配置与控制桌面应用ControlApp 是 DsHidMini 官方桌面伴侣应用WPF / WPF-UI Fluent 风格.NET 10通过 Nefarius.DsHidMini.IPC SDK 与驱动通信。运行不需要管理员权限但编辑共享配置与部分设备操作需要提权应用提供Restart as Administrator入口。三大页面Devices设备查看已连接控制器及其能力、编辑每设备设置HID 模式、LED、无线、摇杆、震动、输出报表、配对/断开蓝牙设备、控制 LED 与震动、有线 USB 关机、查看控制器身份固件、型号、运动路径、克隆启发式数据、打开实时 3D 运动查看器对 Navigation 手柄这类单 LED 无震动设备自动禁用不兼容控件。Profiles配置文件管理 DsHidMini 配置配置文件含全局默认配置文件将配置文件分配给设备并按配置文件编辑设置。Settings设置HID 模式不匹配时自动重启、最小化到托盘、Defender BT 自动切换检测 DS4 模式的 Retro Fighters Defender 蓝牙版并在到达时切到 PS3 模式、驱动 IPC 开关、BthPS3 状态/修复。全局配置文件可从主导航访问。应用级配置文件应用偏好存于%AppData%\ControlApp.json文件名定义于ApplicationConfiguration.GlobalConfigFileName模型在 ApplicationConfiguration.cs主要选项属性说明默认IsUpdateCheckEnabled启动时检查更新trueAutoSwitchDefenderBtToPs3Mode检测到 Retro Fighters Defender 蓝牙版时从 DS4 切到 PS3 模式falseHasAcknowledgedDonationDialog用户已勾选捐赠确认隐藏启动捐赠提示falseMinimizeToTray最小化/关闭时隐藏到通知区域false应用管理三处文件%AppData%\ControlApp.json— 应用偏好%ProgramData%\DsHidMini\DsHidMini.json— 驱动消费的配置%ProgramData%\DsHidMini\ControlApp\DshmUserData.json— 配置文件、已知设备与 ControlApp 元数据IPC SDK从 .NET 访问驱动Nefarius.DsHidMini.IPC 是面向驱动的 .NET 客户端 SDK.NET Standard 2.0Windows-only通过共享内存命令通道、HID 输入报表数据、运动遥测区运动区按分配粒度对齐命名事件与互斥体请求/响应同步与驱动通信。无需提权——命名对象的 DACL 允许已认证用户。安装dotnet add package Nefarius.DsHidMini.IPC或Install-Package Nefarius.DsHidMini.IPC前提是驱动已安装且IPCEnabled true设备级操作还需有已连接控制器。快速上手using Nefarius.DsHidMini.IPC; using Nefarius.DsHidMini.IPC.Models.Public; // 1. 确认驱动 IPC 对象可用避免构造时抛异常 if (!DsHidMiniInterop.IsAvailable) { Console.WriteLine(DsHidMini IPC is unavailable. Ensure the driver is loaded and IPC is enabled.); return; } // 2. 创建客户端连接共享内存与事件 using var interop new DsHidMiniInterop(); // 3. 可选ping 驱动做活性检查 interop.SendPing(); // 4. 读取设备索引 1首个设备的原始输入 var report default(DS3_RAW_INPUT_REPORT); bool gotReport interop.GetRawInputReport(1, ref report, timeout: null); if (gotReport) { // report.ButtonsSelect、Start、L1、R1、Triangle 等 // report.LeftThumbX/Y、report.RightThumbX/Y // report.Pressure、report.BatteryStatus、report.AccelerometerX/Y/Z 等 }设备索引约定有效范围1…255含端点对应驱动的 IPC 槽位SlotIndex发现方式使用DsHidMiniInterop.TryGetIpcSlotIndex(PnPDevice)读取只读设备属性DsHidMiniDriver.IpcSlotIndexPropertyDEVPROP_TYPE_UINT32。不要假设 SetupAPI 枚举顺序等于槽位顺序——例如中间设备断开后剩余设备可能占据非连续槽位如1和3旧驱动缺少该属性时需自行映射基于顺序的启发式在槽位不连续时可能出错主要 API 一览成员说明IsAvailable驱动加载且 IPC 启用时可打开全部所需对象返回trueGetRawInputReport填充DS3_RAW_INPUT_REPORTtimeout: null立即读取指定超时则等待按槽命名事件Global\DsHidMiniHidReportEvent 索引多客户端可同时等待同一槽GetMotionSnapshot填充 seqlock 保护的DsMotionSnapshot标定加速度计/陀螺仪、EEPROM 对、tracker 状态旧驱动无运动区时返回falseGetInputReportMetrics填充最近 1 秒输入报表到达速率Hz与平均到达间隔µs旧驱动无该区域时返回falseSendPing活性检查SetHostAddress/PairToCurrentHost设置配对主机地址 / 配对到当前本地蓝牙射频仅有线设备DisconnectBluetoothDevice断开无线设备有线设备返回STATUS_NOT_SUPPORTEDSetPlayerIndex设置玩家 LED 槽位1–7易失性LED 控制权为驱动时返回STATUS_ACCESS_DENIEDSetLedPattern应用完整 LED 图案标志 四个独立效果块SetRumble设置重/轻马达强度0–255经重映射、替代模式、keep-alive 与 Navigation 抑制处理SetAlternateRumbleMode仅本次会话切换替代震动模式配置重载恢复 JSON 值PowerOffUsbDevice发送 PS3 USB 关机序列零输出报表 Feature 0xF4 禁用仅有线设备CollectControllerDiagnostics有界只读 USB 扫描描述符、端点、字符串、Features 0x01/0xF2/0xF5/0xF7/0xF8、全部 16 页 EEPROM约需 30 秒关键数据类型DS3_RAW_INPUT_REPORT按钮Select、Start、L1、R1…、摇杆LeftThumbX/Y、RightThumbX/Y0x00最小、0x80中心、0xFF最大、压力Pressure.Values每按钮 0–255、电池BatteryStatus、原始运动字节AccelerometerX/Y/Z、GyroscopeDsMotionSnapshot80 字节Pack1结构版本CurrentVersion1含Available、Fallback、HardwareCal、Tracker、SoftwareZero标志以及 EEPROMAccelZero*/AccelOneG*对、GyroZero、GyroEepromCal、实时CalByte、ZeroRef、MotionPath与样本数据原始/Sony 修正轴、milli-g、milli-deg/s、SampleIndex、QPC 时间戳DsInputReportMetrics28 字节Pack1结构ReportRateHz最近约 1 秒窗口内完成的报表数按实际 QPC 缩放、AverageIntervalUs、TimestampQpc。它是传输节奏指标而非单向延迟手柄不标记发送时间SetHostResult配对写 校验读的 NTSTATUS 组合与Succeeded标志Ds3PlayerLeds1–7 到 DS3 LED 掩码的映射0x02/0x04/0x08/0x10514、624、734LedOff为全灭标记0x20Ds3LedPattern/Ds3LedEffect直接 LED 输出Ds3LedEffect有Static、SlowFlash、FastFlash、None预设PowerOffUsbResult两个传输步骤的 NTSTATUS 与SucceededDsBatteryStatusUnknown、Dying、Low、Medium、High、Full、Charging、ChargedDsDeviceTypeUnknown、Sixaxis、Navigation、Motion、Wireless、ThirdPartyHidShanWan2563:0575、Ds3IdentityAdapterUSB054C:0268且bMaxPacketSize0 ! 64DsHidMiniDriver静态类提供DeviceInterfaceGuid与设备属性键电池、主机地址、模式等供即插即用 API 使用错误处理与线程安全SDK 使用专用异常类型异常抛出时机DsHidMiniInteropUnavailableException驱动未加载、IPC 未启用或调用者无法打开所需 IPC 对象DsHidMiniInteropInvalidDeviceIndexExceptiondeviceIndex不在 1…255DsHidMiniInteropReplyTimeoutException驱动未在预期时间内响应DsHidMiniInteropConcurrencyException另一线程正在进行 IPC 调用同一时刻只允许一个DsHidMiniInteropUnexpectedReplyException驱动返回意外或畸形消息线程安全要点IPC 是单线程的——并发调用如两个线程同时SetHostAddress或带超时GetRawInputReport会触发DsHidMiniInteropConcurrencyException。建议串行化所有DsHidMiniInterop调用专用线程或对实例加锁。XInput Bridge让旧游戏读到手柄XInput Bridge 是一个即插即用型 XInput 代理 DLLXInput1_3.dll替换系统 DLL 后游戏可用最多八个控制器DsHidMini 的 DS3SXS 模式由桥接处理真实 Xbox/XInput 设备转发到系统XInput1_3.dll。它还暴露XInputGetExtended返回 DS3 压力感应模拟按键与轴数据SCP_EXTN结构定义于 ScpTypes.h归一化浮点1.0完全按下/满轴0.0释放/中心。函数路由规则DsHidMini DS3SXS由桥接从 HID经 hidapi映射为 XInput 状态/震动真实 XUSB 设备调用被代理到C:\Windows\System32\XInput1_3.dll。XInputGetStateEx会上报 PS/Guide 按钮XInputGetState不上报。桥接处理 DS3 时对摇杆应用抖动补偿死区给定索引无设备时返回ERROR_DEVICE_NOT_CONNECTED。将 DLL 重命名为XInput1_4.dll同样受支持。运动传感器实现RD 深度README.md 提到的标定的运动遥测背后是仓库中投入最深的 RD 主题docs/MOTION.md。驱动的运动子系统基于对 Sony 官方sixaxis.sysx6428,424 字节SHA-256b040b0a3...的洁净室反编译实现原始传感器字节位于 49 字节输入报表的 41–48 字节三个大端 u16 加速度计10 位载荷0–1023 一个大端 u16 陀螺仪仅 yaw绕垂直于手柄正面的轴空闲值约 512标定公式每个轴cal ((raw - zero[i]) * 1024 / (zero[i] - oneG[i])) * 113后 /1024 四舍五入 512即113 counts/g、中心 512X 轴在标定之后镜像0x3FF - cal三种陀螺仪路径由 Feature0x01报表的校准字段列表非型号字节决定PLAIN_ZEROEEPROM 零值纯软件归零、HW_CAL含字段0x07运行硬件校准字节跟踪器、SIXAXIS。两种已知仿制品Obigben、Fake DS3返回的0200 0180模板会让zero oneG保护永不触发因此需要行为检测传感器冻结而非仅靠 EEPROM 校验校准字节陀螺仪硬件零速率微调宿主在输出报表中发送校准字节每步约 26.4 countsSony 常量0x6999Q10实测 26.69 ± 0.21 counts/step放置位置为[5]/[6]HW_CAL或[3]/[4]SIXAXIS。仅发送一次工厂校准字节不够——HW_CAL手柄如 DS3-A2 空闲陀螺仪距 EEPROM 零值差 160 counts需要运行中的 tracker 持续重发新校准字节收敛蓝牙复用 USB 缓存蓝牙从不查询 Feature0x01/0xEF已知的蓝牙宿主都不做此读取而是按蓝牙 MAC 匹配已连接/已拔出的 USB 设备节点从设备属性读回缓存的IdentificationData/MotionCalibrationDataSourceCachedFromUsb。从未经 USB 连接过的手柄保持标称 512/399无线上流量、无启动延迟IPC 遥测第三块共享内存区发布IPC_MOTION_SNAPSHOT_MESSAGE80 字节版本 1SDK 的GetMotionSnapshot消费之ControlApp 提供带数字读数与 HelixToolkit 姿态诊断的运动查看器重力用最短弧倾斜四元数roll ±90° 无欧拉奇异点yaw 由单陀螺仪按手柄水平度-u_z加权积分这些细节体现了一个可验证的实现深度仓库保留了完整的 research/ds3-motion/ 研究树WinUSB 探针、抓包提取器、Ghidra 导出脚本、分析脚本与真实手柄转储。构建与测试驱动构建前置条件Visual Studio 2026MSBuild 18、C 桌面工作负载、Windows SDK 与 WDK 10.0.28000、含 Driver Module Framework (DMF) 的仓库子模块。从仓库根目录.\build.cmd CompileNUKE 构建会先编译所需的用户态DmfU库再重建解决方案。本地构建默认 Debug发布构建传--configuration Release。常用验证目标.\build.cmd TestConfigParser .\build.cmd TestControlAppXInput Bridge 构建.\build.cmd CompileXInputBridge # 构建代理 DLL 与 scpdlltester .\build.cmd TestXInputBridge # 合成自测无需硬件 .\build.cmd BenchmarkXInputBridge # 记录映射与空设备轮询耗时 .\build.cmd AuditXInputBridge # 测试 基准支持 Win32、x64、ARM64。输出为XInput1_3.dll部署到游戏可执行文件旁或使用 x360ce 之类的加载器。scpdlltester支持--self-test/--benchCI 用无需硬件与--hw-test需要连接 SXS DualShock 3 实机验证 GetState/GetStateEx/GetExtended、震动、HID 延迟与加载/卸载循环。ControlApp 发布.\build.ps1 PublishControlApp产出单文件、框架依赖的 win-x64 发布到仓库根bin\目录Release / win-x64 / framework-dependent / single-file。安装、许可与支持安装预编译二进制与安装步骤见项目 releases 页。生产安装器MSI由 CI 构建并签名详见 setup/README.md不建议自行安装自编译驱动除非用于测试/开发——请使用带签名的项目发布版本。维护者的带标签发布流程记录在 docs/RELEASE.md许可仓库含BSD-3-Clause及其他许可组件见各自LICENSE文件社区项目与 Sony Interactive Entertainment Inc. 无关联。文中的 PlayStation、PSP、PS2、PS one、DUALSHOCK、SIXAXIS 均为索尼的注册商标支持官方渠道之外不存在其他官网谨防冒充者社区支持遵循项目文档列出的渠道参考与致谢驱动实现参考了多个公开研究资源包括 Eleccelerator DualShock 3、HID Usage Tables、linux hid-sony 等依赖 DMF、cJSON、HIDAPI相关项目包括 ScpToolkit、FireShock、AirBender、WireShock 与 EmuController构建/发布依赖 GitHub Actions 与 NUKE。进一步阅读仓库内文档docs/README.mdRD 笔记索引、docs/RELEASE.md发布流程、docs/NAVIGATION_CONTROLLER.md、docs/THIRD_PARTY_HID_ADAPTER.md、docs/DS3_IDENTITY_ADAPTER.md。赞分享驱动开发硬件开发【免费下载链接】DsHidMiniVirtual HID Mini-user-mode-driver for Sony DualShock 3 Controllers项目地址https://gitcode.com/gh_mirrors/ds/DsHidMini点击查看免费下载相关推荐终极DsHidMini驱动指南让DualShock 3手柄在Windows 10/11焕发新生 终极DsHidMini驱动指南让DualShock 3手柄在Windows 10/11焕发新生 DsHidMini是一款专为索尼DualShock 3手驱动开发硬件开发DsHidMini终极指南DualShock 3 Windows驱动完整教程DsHidMini终极指南DualShock 3 Windows驱动完整教程 对于希望在Windows系统上使用索尼DualShock 3手柄的玩家来说Ds驱动开发硬件开发DsHidMini让DualShock 3手柄在Windows上完美运行的终极解决方案DsHidMini让DualShock 3手柄在Windows上完美运行的终极解决方案 DsHidMini是一款专门为索尼DualShock 3手柄设计的虚拟驱动开发硬件开发上一篇Sourcery源码贡献指南如何为开源项目提交PR下一篇Linux 命令大全之 prtstat从 /proc 读取进程统计信息的利器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表