Python在Windows下获取USB PID与VID的实现方案
本文介绍如何在Windows系统中使用Python获取连接的USB设备的PID和VID。对比了pyusb库的依赖复杂性,推荐使用pyWin32库通过WMI接口查询。重点解析Win32_USBHub与win32_usbcontrollerdevice的区别,并提供获取所有USB设备信息的完整代码示例,适用于需要稳定部署的场景。
Windows下获取USB信息的挑战
在Linux环境中,获取USB设备的PID和VID非常便捷,通常只需执行“lsusb”命令即可。
然而,在Windows操作系统中,这一过程相对复杂,没有如此直接的命令行工具。
此前曾尝试通过读取注册表来获取当前连接的USB设备PID和VID,但注册表中存储的是历史插入记录,并非实时连接状态,因此无法准确反映当前挂载的设备信息。
虽然pyusb库可以解决此问题,但它依赖特定的底层库,且不同Windows版本可能需要不同的依赖配置。若计划将程序大规模部署到多种系统环境中,需谨慎评估其兼容性风险。
基于pyWin32的解决方案
最终选择使用更通用的pyWin32库。通过WMI(Windows Management Instrumentation)接口测试了两个实例:“Win32_USBHub”仅能捕获部分USB集线器信息,而“win32_usbcontrollerdevice”则能获取所有USB设备信息。推测前者针对USB Hub,后者针对具体的USB Device。
Win32_USBHub代码实现
以下是使用Win32_USBHub实例获取信息的代码示例:
>>> import win32com.client
>>> wmi = win32com.client.GetObject ("winmgmts:")
>>> for usb in wmi.InstancesOf ("Win32_USBHub"):
... print usb.DeviceID
...
win32_usbcontrollerdevice代码实现
以下是使用win32_usbcontrollerdevice实例获取所有USB设备信息的代码示例:
import win32com.client
wmi = win32com.client.GetObject ("winmgmts:")
for usb in wmi.InstancesOf ("win32_usbcontrollerdevice"):
if "VID_05E0&PID_2107" in usb.Dependent:
usbPidVidCorrect = True
以上即为在Windows环境下使用Python获取USB PID与VID的完整方法。希望该方案能为相关开发者提供有效参考,欢迎交流探讨。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









