首先,我想感谢您抽出时间阅读我的帖子。 我需要一个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
谢谢!
答案 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."