您可以 return 磁盘的卷 GUID VBA 吗?
Can you return the Volume GUID of a disk with VBA?
我遇到了另一个post VBA Open a USB device using it's unique id in wmi
poster 展示了一种通过 VBA 和 WMI 获取 USB 设备 UID 的方法,但我不确定如何使用 VBA.[= 从 WMI 中检索 VolumeGUID。 14=]
我想获取 DeviceID,然后 return 如果可能的话,如果特定设备与 DeviceID 匹配,则获取 VolumeGUID。
这个 post How to get the volume GUID 似乎暗示它是可能的,但它适用于 C++
我只是查询了错误的 WMI class?
我以前用VBS来做这个,你可以减少和修改它以在VBA中使用。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2")
Volume
MountPoint
Sub Volume()
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Volume") ' Windows XP and earlier: not available.
wscript.echo "[ Win32_Volume ] - " & colItems.Count & " items"
For Each objItem in colItems
ShowT "Access", objItem.Access
ShowT "Automount", objItem.Automount
ShowT "Availability", objItem.Availability
ShowT "BlockSize", objItem.BlockSize
ShowT "Capacity", objItem.Capacity
ShowT "Caption", objItem.Caption
ShowT "Compressed", objItem.Compressed
ShowT "Description", objItem.Description
ShowT "DeviceID", objItem.DeviceID
ShowT "DirtyBitSet", objItem.DirtyBitSet
ShowT "DriveLetter", objItem.DriveLetter
ShowT "DriveType", objItem.DriveType
ShowT "FileSystem", objItem.FileSystem
ShowT "FreeSpace", objItem.FreeSpace
ShowT "IndexingEnabled", objItem.IndexingEnabled
ShowT "Label", objItem.Label
ShowT "MaximumFileNameLength", objItem.MaximumFileNameLength
ShowT "Name", objItem.Name
ShowT "NumberOfBlocks", objItem.NumberOfBlocks
ShowT "PNPDeviceID", objItem.PNPDeviceID
ShowT "Purpose", objItem.Purpose
ShowT "Status", objItem.Status
ShowT "StatusInfo", objItem.StatusInfo
ShowT "SerialNumber", objItem.SerialNumber
ShowT "SupportsDiskQuotas", objItem.SupportsDiskQuotas
ShowT "SupportsFileBasedCompression", objItem.SupportsFileBasedCompression
wscript.echo "-----"
Next
wscript.echo vbCrlf & "====================" & vbCrlf
End Sub
Sub MountPoint()
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_MountPoint")
wscript.echo "[ Win32_MountPoint ] - " & colItems.Count & " items"
For Each objItem in colItems
ShowT "Directory", objItem.Directory
ShowT "Volume", objItem.Volume
wscript.echo "-----"
Next
wscript.echo vbCrlf & "====================" & vbCrlf
End Sub
Sub ShowT(s, obj)
If Len(obj) > 0 Then Wscript.Echo vbTab & s & ": " & obj
End Sub
我遇到了另一个post VBA Open a USB device using it's unique id in wmi poster 展示了一种通过 VBA 和 WMI 获取 USB 设备 UID 的方法,但我不确定如何使用 VBA.[= 从 WMI 中检索 VolumeGUID。 14=]
我想获取 DeviceID,然后 return 如果可能的话,如果特定设备与 DeviceID 匹配,则获取 VolumeGUID。
这个 post How to get the volume GUID 似乎暗示它是可能的,但它适用于 C++
我只是查询了错误的 WMI class?
我以前用VBS来做这个,你可以减少和修改它以在VBA中使用。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2")
Volume
MountPoint
Sub Volume()
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Volume") ' Windows XP and earlier: not available.
wscript.echo "[ Win32_Volume ] - " & colItems.Count & " items"
For Each objItem in colItems
ShowT "Access", objItem.Access
ShowT "Automount", objItem.Automount
ShowT "Availability", objItem.Availability
ShowT "BlockSize", objItem.BlockSize
ShowT "Capacity", objItem.Capacity
ShowT "Caption", objItem.Caption
ShowT "Compressed", objItem.Compressed
ShowT "Description", objItem.Description
ShowT "DeviceID", objItem.DeviceID
ShowT "DirtyBitSet", objItem.DirtyBitSet
ShowT "DriveLetter", objItem.DriveLetter
ShowT "DriveType", objItem.DriveType
ShowT "FileSystem", objItem.FileSystem
ShowT "FreeSpace", objItem.FreeSpace
ShowT "IndexingEnabled", objItem.IndexingEnabled
ShowT "Label", objItem.Label
ShowT "MaximumFileNameLength", objItem.MaximumFileNameLength
ShowT "Name", objItem.Name
ShowT "NumberOfBlocks", objItem.NumberOfBlocks
ShowT "PNPDeviceID", objItem.PNPDeviceID
ShowT "Purpose", objItem.Purpose
ShowT "Status", objItem.Status
ShowT "StatusInfo", objItem.StatusInfo
ShowT "SerialNumber", objItem.SerialNumber
ShowT "SupportsDiskQuotas", objItem.SupportsDiskQuotas
ShowT "SupportsFileBasedCompression", objItem.SupportsFileBasedCompression
wscript.echo "-----"
Next
wscript.echo vbCrlf & "====================" & vbCrlf
End Sub
Sub MountPoint()
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_MountPoint")
wscript.echo "[ Win32_MountPoint ] - " & colItems.Count & " items"
For Each objItem in colItems
ShowT "Directory", objItem.Directory
ShowT "Volume", objItem.Volume
wscript.echo "-----"
Next
wscript.echo vbCrlf & "====================" & vbCrlf
End Sub
Sub ShowT(s, obj)
If Len(obj) > 0 Then Wscript.Echo vbTab & s & ": " & obj
End Sub