You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断连接端口是否为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:33:01