如何判断连接端口是否为USB及DeviceID是否属于USB设备
判断DeviceID是否属于USB设备的方法
其实你当前用Win32_USBHub类查询到的实例本身就是USB集线器设备,所以它们的DeviceID必然是USB相关的。不过如果想要更严谨地验证(或者以后扩展到其他USB设备类时判断),可以从这几个角度入手:
- 看前缀标识:USB设备的
DeviceID标准格式都是以USB\开头的,这是最直接的判断依据。比如你打印出来的ID如果是USB\VID_046D&C52B&0&2这类格式,那肯定是USB设备的ID。 - 拆解标准结构:正规的USB设备
DeviceID会包含厂商ID(VID)和产品ID(PID),格式为USB\VID_xxxx&PID_xxxx\...,其中xxxx是4位十六进制数字——这是USB-IF(USB Implementers Forum)规定的标准标识,用来区分不同厂商和产品。 - 结合WMI类的特性:
Win32_USBHub是WMI专门用来枚举USB集线器的类,它返回的所有实例都是USB设备,所以理论上这里的DeviceID不会出现非USB的情况。但如果以后你要查询其他USB设备(比如用Win32_USBDevice类),上面的前缀和结构判断依然适用。
给你修改一下代码,加入判断逻辑,还能提取出有用的VID和PID信息:
import win32com.client wmi = win32com.client.GetObject("winmgmts:") for usb in wmi.InstancesOf("Win32_USBHub"): device_id = usb.DeviceID # 基础判断:是否以USB\开头 if device_id.startswith("USB\\"): print(f"确认是USB设备ID: {device_id}") # 进一步提取VID和PID if "VID_" in device_id and "PID_" in device_id: # 拆分出厂商ID vid = device_id.split("VID_")[1].split("&")[0] # 拆分出产品ID pid = device_id.split("PID_")[1].split("\\")[0] print(f"厂商ID(VID): {vid}, 产品ID(PID): {pid}") else: print(f"非USB设备ID: {device_id}")
这样运行后,不仅能判断是不是USB设备ID,还能拿到厂商和产品的唯一标识,方便后续的设备识别或排查。
内容的提问来源于stack exchange,提问作者Harel2320
相关产品推荐
相关产品推荐

