如何使USB控制器/游戏手柄与python一起使用

问题描述 投票:3回答:1

我有一个USB控制器,试图从Microsoft®SideWinder®即插即用游戏键盘上获取输入。我在尝试弄清楚如何正确接收其输入时遇到困难。不幸的是,我不能使用pygame,因为它需要一个窗口来接收输入,但是我必须生成一个pyglet窗口(通过PsychoPy)来运行我的程序。使用pygame,它可以连接并显示按钮的状态,但是如果不创建窗口,它就无法接收输入。我尝试寻找其他库,但是遇到的只是Inputs,它与我的控制器不兼容(安装后未检测到设备)。我已经使用在线游戏手柄测试仪对其进行了测试,因此控制器本身可以正常工作。 PsychoPy的操纵杆API当前已损坏,无法正常工作,因此也没有运气。

我真的希望有人对如何将控制器/游戏手柄的输入接收到程序中提出建议?

python windows pygame pyglet psychopy
1个回答
1
投票

对于Windows,您可以直接使用WINMM.dll

使用ctypes库加载dll(请参阅Loading shared libraries。使用ctypes.WINFUNCTYPE创建该函数的原型:

joyGetDevCapsW

创建代表DLL的python函数joyGetDevCapsWjoyGetPosExjoyGetPosEx。并分别为类型import ctypes winmmdll = ctypes.WinDLL('winmm.dll') # [joyGetNumDevs](https://docs.microsoft.com/en-us/windows/win32/api/joystickapi/nf-joystickapi-joygetnumdevs) """ UINT joyGetNumDevs(); """ joyGetNumDevs_proto = ctypes.WINFUNCTYPE(ctypes.c_uint) joyGetNumDevs_func = joyGetNumDevs_proto(("joyGetNumDevs", winmmdll)) # [joyGetDevCaps](https://docs.microsoft.com/en-us/windows/win32/api/joystickapi/nf-joystickapi-joygetdevcaps) """ MMRESULT joyGetDevCaps(UINT uJoyID, LPJOYCAPS pjc, UINT cbjc); 32 bit: joyGetDevCapsA 64 bit: joyGetDevCapsW sizeof(JOYCAPS): 728 """ joyGetDevCaps_proto = ctypes.WINFUNCTYPE(ctypes.c_uint, ctypes.c_uint, ctypes.c_void_p, ctypes.c_uint) joyGetDevCaps_param = (1, "uJoyID", 0), (1, "pjc", None), (1, "cbjc", 0) joyGetDevCaps_func = joyGetDevCaps_proto(("joyGetDevCapsW", winmmdll), joyGetDevCaps_param) # [joyGetPosEx](https://docs.microsoft.com/en-us/windows/win32/api/joystickapi/nf-joystickapi-joygetposex) """ MMRESULT joyGetPosEx(UINT uJoyID, LPJOYINFOEX pji); sizeof(JOYINFOEX): 52 """ joyGetPosEx_proto = ctypes.WINFUNCTYPE(ctypes.c_uint, ctypes.c_uint, ctypes.c_void_p) joyGetPosEx_param = (1, "uJoyID", 0), (1, "pji", None) joyGetPosEx_func = joyGetPosEx_proto(("joyGetPosEx", winmmdll), joyGetPosEx_param) joyGetNumDevs创建类:

joyGetDevCaps

请参见简单示例以测试api:

joyGetPosEx

[api绑定和示例在GitHub存储库JOYCAPS中提供

© www.soinside.com 2019 - 2024. All rights reserved.