【问题标题】:Using joyGetPosEx fails when switching joystick USB port切换操纵杆 USB 端口时使用 joyGetPosEx 失败
【发布时间】:2011-09-22 09:49:35
【问题描述】:

我正在使用“joyGetPosEx”函数来检测操纵杆输入:

JOYINFOEX joyInfoEx;
ZeroMemory(&joyInfoEx, sizeof(joyInfoEx));
joyInfoEx.dwSize = sizeof(joyInfoEx);
// poll for values
joyGetPosEx(JOYSTICKID1, &joyInfoEx);

连接摇杆后,一切正常,函数返回“JOYERR_NOERROR”。

但是,如果在程序运行期间,我断开操纵杆并将其连接到不同的 USB 端口, "joyGetPosEx(JOYSTICKID1, &joyInfoEx);"不断返回“JOYERR_UNPLUGGED”值。

如果我将设备重新连接到初始 USB 端口,它会重新开始工作。

有人知道如何让操纵杆在连接到新端口的情况下工作吗?

提前致谢!

【问题讨论】:

  • 与您的问题无关,但仅供参考,JOYINFOEX joyInfoEx; ZeroMemory(&joyInfoEx, sizeof(joyInfoEx)); joyInfoEx.dwSize = sizeof(joyInfoEx); 可以更简洁地表示为JOYINFOEX joyInfoEx = { sizeof(JOYINFOEX) };。您正在编写 C++,而不是 C... ;-]
  • 谢谢,好点,但仍然没有帮助我:)
  • 很难看出这是一个真正的问题。请联系驱动程序制造商以获得支持。

标签: c++ joystick reconnect


【解决方案1】:

我会说您有一个没有序列号的 USB 设备,因此 Windows 通过插入位置来识别它。它是否会开始充当 JOYSTICKID2


我们最终发现joyConfigChanged 函数能够重新连接操纵杆。 [MSDN 说#include <dinput.h> 是使用此功能所必需的,事实证明,包含的顺序很重要:首先是mmsystem.h,然后是dinput.h

【讨论】:

  • 这是我的第一个想法,所以我轮询了所有可能的设备(从 JOYSTICKID1 到 JOYSTICKID1+15)。 JOYSTICKID1 不断返回 JOYERR_UNPLUGGED,其余的只是返回 JOYERR_PARMS。如果我连接不同类型的操纵杆也会发生这种情况,但仍然无法识别。只有当原来的操纵杆重新连接到原来的端口时,它才能重新开始正常动作。
  • joyConfigChanged 有什么乐趣吗? (是的,糟糕的双关语)
  • 由于某种原因,我无法调用joyConfigChanged 函数。我包括MMSystem.h 并链接到winmm.lib 但是当我尝试调用joyConfigChanged 函数时,我得到:“错误C3861:'joyConfigChanged':找不到标识符”当我查看MMSystem.h 文件时,确实该功能未定义。有什么想法吗?
  • 我包括dinput.h。这些是我的包含:#define DIRECTINPUT_VERSION 0x0800 #include <dinput.h> #include <MMSystem.h> 但是,如果我添加 #define _INC_MMSYSTEM 定义所需的 joyConfigChanged,那么我的代码将无法编译。
  • @Costya:也许您必须在dinput.h 之前包含mmsystem.h
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2021-10-16
  • 1970-01-01
相关资源
最近更新 更多