我正在编写一个将在启动时启动的脚本(可能是通过批处理文件)。此脚本将用于检测两台设备何时连接到计算机(特别是WiiMote和Balance Board)。这些通过蓝牙与东芝蓝牙堆栈配对,但也作为“符合HID标准的游戏控制器”在设备管理器中显示为人机接口设备。 在此脚本检测到WiiMote和Balance Board已连接后,它将启动一个批处理文件,启动GlovePIE(模拟键盘和鼠标)和一个用pygame编码的游戏。游戏和GlovePIE都已完成。
现在我一直在检测设备连接是否成功。 我只使用Python,因为它是我所知道的以及与此相关的其他程序编码的内容。如果有人有更优雅的解决方案,请告诉我。
我对检测到WiiMote和Balance Board已连接的想法: 1.找到东芝蓝牙程序中的位置,表示两台设备的配对成功。 2.轮询两个符合HID标准的游戏控制器的设备管理器。这种方法假定没有其他控制器可以连接,对于我的情况是真的。 3.接受其他方法的建议。
我找不到关于东芝程序的大量文档,所以我开始寻找与设备管理器交互的方法。
我找到了一个与设备管理器here连接的Python模块 我能够使用该模块获取设备管理器中所有设备的列表。该模块仅支持按磁盘,scsi设备,卷和存储控制器进行类别排序;不是人机接口设备。
分配给所有设备列表的变量是all_dev。 我认为这是一个列表而不是元组因为“type(all_dev)是列表”返回true。 “len(all_dev)”也返回172。
这是目前的主要问题: 如果我打印all_dev,它会在括号“[]”中给出一个很长的列表,其中单个项目大于/小于符号“<>”。 如果我选择其中一个项目,例如在列表中搜索它,如:
>>> "<HID-compliant game controller>" in all_dev
False
但是如果运行:
>>> x = "test"
>>> all_dev.append(x)
>>> "test" in all_dev
True
当我使用count函数时,会发生同样的事情,对于其他任何事情,测试0都会发生。
如果我能找出为什么in函数总是返回false,我希望能够编写脚本的其余部分。
这是程序的第一部分看起来只有部分列表输出(太长时间)。
>>> from infi.devicemanager import DeviceManager
>>> dm = DeviceManager()
>>> all_dev = dm.all_devices
>>> print all_dev
[<USB Root Hub>, <Performance Counters for Windows Driver>, <Generic volume shadow copy>, <Generic volume>, <System speaker>, <VirtualBox Service>, <Generic volume shadow copy>, <KSecPkg>, <Remote Desktop Device Redirector Bus>, <Bluetooth RFHID>, <PEAUTH>, <ViewSonic VX1935wm-5 >, <aswStm>, <Terminal Server Keyboard Driver>, <Extended IO Bus>, <VirtualBox USB Monitor Driver>, <Link-Layer Topology Discovery Mapper I/O Driver>, <Bluetooth HID Port>]
答案 0 :(得分:0)
这些对象看起来像generator个对象,每个对象类别一个。
如果您想获取所有单个设备,可以枚举每个生成器,例如
[list(category) for category in all_dev]
将为您提供每个类别中设备列表的列表。然后,您可以搜索您要查找的设备的列表列表。你可以压扁列表,检查你想要的设备是否是那个平面列表:
'dev_I_want' in [item for category in all_dev for item in list(category)]
但是这假设list(a_category)
返回一个只包含设备名称的简单列表 - 它可能更复杂。