Можете ли вы вернуть GUID тома диска с помощью VBA?

Я наткнулся на другой пост VBA Open a USB устройство, использующее его уникальный идентификатор в wmi, который остался без ответа, где плакат показал способ получить UID USB-устройства через VBA и WMI, но я не уверен, как получить VolumeGUID из WMI с помощью VBA.

Я хотел бы получить DeviceID, а затем вернуть VolumeGUID, если это возможно, для конкретного устройства, если оно соответствует DeviceID.

В этом сообщении Как получить GUID тома кажется, что это возможно, но это для С++

Я просто запрашиваю неправильный класс WMI?


person Matt    schedule 19.01.2016    source источник


Ответы (1)


Раньше у меня был 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
person PatricK    schedule 19.01.2016
comment
Я считаю, что смогу преобразовать это, спасибо, я попробую! - person Matt; 19.01.2016
comment
Итак, я смог заставить его работать, но есть ли способ получить VolumeGUID из DeviceID в Win32-PnPEntity. Я разместил вопрос по адресу stackoverflow.com/questions/34873073/ - person Matt; 19.01.2016