我在C++中工作,我需要处理一个带有力反馈的输入设备。我发现一个解决方案可以是使用DirectInput,所以我开始研究这个问题。
第一个问题:关于处理力反馈装置的其他方法有什么建议吗?(Win32应用程序,而不是UWP)
回到DirectInput
我脑海中的参考起点是DirectInput样本,特别是FFconst示例,其中根据从简单GUI获取的值向第一个设备轴施加恒定的反馈力。在我的例子中,我想要实现的是拥有一个简单的控制台应用程序,在这个应用程序中,我根据从标准输入中获取的值设置一个恒定的力。
根据示例和文档,使用DirectInput API的基本步骤是:
DI8DEVCLASS_GAMECTRL设备进行筛选,并将范围限制为DIEDFL_ATTACHEDONLY | DIEDFL_FORCEFEEDBACK);现在,在我们遇到SetCooperativeLevel mehtod之前,一切都进行得很顺利,因为它需要一个HWND窗口句柄作为输入,“要与设备相关联”,并且“必须是属于进程的有效顶层窗口句柄”。因为我正在编写一个控制台应用程序,所以我需要找到一个有效的HWND指针:我按照这建议解决了这个问题。无论如何,我得到的HWND指针似乎不是一个有效的窗口句柄,因为我得到了一个E_HANDLE错误,因为我会指定nullptr作为参数。我发现通过https://msdn.microsoft.com/en-us/library/windows/desktop/ms633514(v=vs.85).aspx调用指定参数允许不获取无效的句柄错误。但是,我无法获得设备,我得到了DIERR_OTHERAPPHASPRIO错误,这只不过是E_ACCESSDENIED。我找到表示,似乎有人用处理DIERR_INPUTLOST错误的方式来处理该错误,即在way循环中重新获取设备,如UpdateInputState函数中的直接输入样本中所示。无论如何,我无法退出这个循环,即设备设备一直被拒绝。
那就是说我最后
第二个问题:如何在控制台应用程序中或在DLL中使用DirectInput API?(Win32)对于控制台应用程序,我想了解为什么我所做的步骤不能工作,对于DLL,我想知道是否有人知道可以在哪个HWND指针上使用。
发布于 2019-08-03 18:47:10
Microsoft提供了一个函数,用于获取控制台应用程序的窗口,用于这样的用途。
HWND WINAPI GetConsoleWindow(void);https://stackoverflow.com/questions/51900546
复制相似问题