Xbox平台UWP应用中模拟游戏手柄输入问题求助
Xbox UWP应用手柄输入注入无响应的解决方案
我之前也碰到过一模一样的问题——UWP里模拟键盘输入完全正常,手柄按键却毫无反应,后来排查出几个关键的点,你可以照着试试:
1. 必须完整初始化手柄输入对象
Xbox平台对手柄输入的校验比PC严格很多,只设置Buttons字段是不够的,系统会要求所有参数都有合法的默认值,否则会直接忽略注入请求。修正后的代码应该是这样的:
var inputInjector = InputInjector.TryCreate(); if (inputInjector != null) { // 初始化完整的手柄输入结构,未用到的轴/触发器全部设为0 var gamepadPress = new InjectedInputGamepadInfo { Buttons = GamepadButtons.A, LeftTrigger = 0, RightTrigger = 0, LeftThumbstickX = 0, LeftThumbstickY = 0, RightThumbstickX = 0, RightThumbstickY = 0 }; // 注入按下动作 inputInjector.InjectGamepadInput(gamepadPress); // 模拟释放按键(很多Xbox游戏需要检测完整的按下-释放周期才会响应) var gamepadRelease = new InjectedInputGamepadInfo { Buttons = GamepadButtons.None, LeftTrigger = 0, RightTrigger = 0, LeftThumbstickX = 0, LeftThumbstickY = 0, RightThumbstickX = 0, RightThumbstickY = 0 }; inputInjector.InjectGamepadInput(gamepadRelease); }
2. 再次确认权限配置的细节
虽然你已经添加了inputInjectionBrokered权限,但要确保包清单的配置没有遗漏:
- 根
Package节点必须包含rescap命名空间:xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces要包含rescap:IgnorableNamespaces="rescap"<Capabilities>节点下的权限声明不能嵌套在其他节点里,必须是直接子节点:<Capabilities> <rescap:Capability Name="inputInjectionBrokered" /> </Capabilities>
3. 确认输入注入的时机
有些Xbox游戏或应用只会在前台激活状态下监听输入,所以要确保你是在目标应用处于前台、或者自己的UWP应用处于激活状态时执行注入代码。
另外,你的应用和Xbox系统版本都是16299,这个版本对InputInjector的手柄注入支持是完整的,版本匹配度没问题。
内容的提问来源于stack exchange,提问作者Jakub Krampl
相关产品推荐
相关产品推荐

