Steam的RAW输入WM_CHANGE问题未检测到设备

问题描述

我不太确定如何为此线程加上标题,但这是我的问题。

我是一名游戏开发人员,我于今年早些时候在Steam上发布了我的游戏演示,几个月后一切正常。 Valve随后发布了Steam的更新版本,阻止了一些RAW输入功能,从而破坏了我游戏的输入。值得庆幸的是,有一种解决方法可以禁用Steam中的控制器配置支持,但是如果有人下载了该演示,并且他们的游戏手柄无法正常工作,他们很可能甚至不会尝试对其进行故障排除,并且如果他们不讲话, /读英语,这尤其会有问题。

几个月前,我与Valve联系以了解发生了什么,在我询问是否需要更新游戏版本的Steamworks SDK以解决问题后,他们做出了以下回应。 (在上下文中,这是一个虚幻引擎4游戏,我使用的是称为WM Input Manager的RAW Input插件来处理输入,因为它默认情况下允许我连接4个以上的游戏手柄而不会弄乱XInput等。)

在这种情况下,Steamworks版本无关紧要-影响此代码的代码位于叠加层中,该叠加层是作为Steam客户端更新过程的一部分进行更新的。我花了一些时间研究这个问题,似乎有一个错误,我们打算阻止的RawInput设备泄漏了,一旦我们解决了您的游戏就没有看到我们的仿真控制器的问题,因为我们没有在欺骗您的游戏某些功能需要。看来您所依赖的不是我们模拟的WM_INPUTWM_INPUT_DEVICE_CHANGE消息。现在,我们只是在欺骗Unity使用的功能模式:

// The Unity3D engine uses the raw HID API for game controller support. 
// The sequence of calls is: 
// - GetRawInputDeviceList() 
// - For each device call GetRawInputDeviceInfoW(RIDI_DEVICEINFO) 
// - If the device has a usage page 1 and a usage of 4 (joystick) or 5 (gamepad) 
// -   GetRawInputDeviceInfoW(RIDI_DEVICENAME),look for "IG_" in the name 
// -  CreateFileW() non-overlapped 
// -  HidD_GetPreparsedData() 
// -  HidD_GetProductString() 
// -  HidP_GetCaps() 
// -  HidP_GetButtonCaps() 
// -  HidP_GetValueCaps() 
// -  HidP_MaxDataListLength() 
// -  CloseHandle() 
// then... 
// -  CreateFileW(FILE_FLAG_OVERLAPPED) 
// -  loop: ReadFile(),GetOverlappedResult(),HidP_GetData()

我将在我的待办事项列表中添加此问题的解决方法,但是要解除阻止您游戏的问题,您可能需要尝试监听WM_DEVICECHANGE,然后通过GetRawInputDeviceList获取设备并定期轮询,而不要使用{ {1}} / WM_INPUT_DEVICE_CHANGE消息来控制其余的设备轮询呼叫。

可悲的是,我的C ++知识是基础知识,因此虽然这听起来像是一个超级简单的修复,就像他们听起来那样,但我不确定如何解决此问题。我一直在寻找RAW Input的官方文档,阅读了所有相关的和潜在相关的RAW Input教程和论坛主题,我花了整整一周的时间,每天12个小时以上,试图学习如何解决这一问题,并且最后,我寻求帮助(这不是我通常要做的事情),因为你们比我以前经验丰富得多。

我想学习如何处理这样的问题,并且继续学习越来越多的C ++和输入编程,因为这只会在将来对我有所帮助,但是我觉得这个问题可能要花我几个月的时间找出答案,但打算在今年年底前推出这款游戏,并且有大量工作要做与该问题无关。

在关闭Steam并运行非Steam版本的游戏时,输入工作正常,但是在Steam运行时,它们具有的阻塞代码只会破坏输入。

大约三周前,我与Steam进行了接触,并被告知他们的首席叠加程序程序员已将修复程序添加到他的待办事项列表中,但到目前为止,一切都没有,而且在Steam秋季游戏节期间即将到来(2.5周),我真的不希望这个问题困扰演示,它实际上给了我噩梦,并极大地影响了开发。

我知道这是一个很大的要求,看看是否有人可以在这里帮助我,但是对您的帮助表示赞赏,正如我所说,我想学习如何自行解决此类问题,因此,如果您有任何指导关于RAW输入编程的学习资源,我很乐意将其检查出来,因为这是我需要学习的东西。

在此先感谢大家,就像我每次在任何地方发布任何内容寻求帮助一样,我可能会在有人回答问题之前解决该问题,但是如果我确实解决了问题,我将确保发布并让大家都知道万一有人碰到这个问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)