如何通过解析PID和VID来判断是否插入了USB

时间:2014-01-17 16:36:15

标签: vbscript usb detect

首先,我想感谢您抽出时间阅读我的帖子。 我需要一个Visual Basic或VBSCript代码,可以检测是否插入了特定的USB。 我有自己的信息:

VID_0DF7 PID_0620

我的代码不想工作:(我不知道如何让它只读取特定的VID和Pid :(请不要因为我不知道如何做某事而略微翻阅我的帖子。 我在互联网上找到了很多例子,但实际上是为了告诉所有插入设备的PID和VID是什么......所以...我不需要它们......

我的代码:

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colDevices = objWMIService.ExecQuery _
    ("Select * From Win32_USBControllerDevice")

For Each objDevice in colDevices
    strDeviceName = objDevice.Dependent
    strQuotes = Chr(34)
    strDeviceName = Replace(strDeviceName, strQuotes, "")
    arrDeviceNames = Split(strDeviceName, "=")
    strDeviceName = arrDeviceNames(1)
    Set colUSBDevices = objWMIService.ExecQuery _
        ("Select * From Win32_PnPEntity Where DeviceID = '" & strDeviceName & "'")
    For Each objUSBDevice in colUSBDevices
        Wscript.Echo objUSBDevice.Description
    Next    
Next

谢谢!

1 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

Set wmi = GetObject("winmgmts://./root/cimv2")

vid = "VID_0DF7"
pid = "PID_0620"

For Each d In wmi.ExecQuery("SELECT * FROM Win32_USBControllerDevice")
  If InStr(d.Dependent, vid & "&" & pid) > 0 Then
    WScript.Echo wmi.Get(d.Dependent).Description
  End If
Next

如果您希望在没有符合条件的设备时发出通知,则无法在循环内部实现Else分支。嵌套的Else会针对与条件不匹配的每个设备触发,而只有在没有设备符合条件时才需要通知。当您找到匹配的设备时,请使用更改为True的布尔值:

found = False
For Each d In wmi.ExecQuery("SELECT * FROM Win32_USBControllerDevice")
  If InStr(d.Dependent, vid & "&" & pid) > 0 Then
    WScript.Echo wmi.Get(d.Dependent).Description
    found = True
  End If
Next

If Not found Then WScript.Echo "USB not found."