Возникла необходимость програмно обращаться с определенному флеш-накопителю. Так как эти девайсы монтируются часто под разными буквами, в зависимости от порта, порядка подключения, начал искать варианты однозначного определения сабжа.
Изначально думал заставить монтироваться флешку всегда на одну-единственную букву, но к сожалению однозначного решения не нашел.
Поэтому решил определять эту букву по какому-нибудь ID устройства. Вот что получилось:
Код Функция ПолучитьБуквуДиска(SN)
scrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
scrptCtrl.Language = "vbscript";
scrptCtrl.addcode("Public Function RunCodeIn1c()
|Res = vbNullString
|strComputer ="".""
|strSN="""+SN+"""
|Set objWMIService = GetObject(""winmgmts:\\"" & strComputer & ""\root\CIMV2"")
|Set colItems = objWMIService.ExecQuery(_
|""Sel ect * fr om Win32_LogicalDisk where VolumeSerialNumber = '"" & strSN & ""' "",,48)
|For Each objItem in colItems
|Res = objItem.DeviceID
|Next
|RunCodeIn1c = Res
|End Function
|");
Рез = scrptCtrl.Run("RunCodeIn1c");
Возврат(Рез);
КонецФункции
Информацию о подключенных флеш-накопителях можно получить например так (в EXCEL):
Код Private Sub CommandButton1_Click()
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Sel ect * from Win32_LogicalDisk", , 48)
i = 0
For Each objItem In colItems
i = i + 1
Cells(i, 1) = objItem.Caption
Cells(i, 2) = objItem.Description
Cells(i, 3) = objItem.DeviceID
Cells(i, 4) = objItem.DriveType
Cells(i, 5) = objItem.FileSystem
Cells(i, 6) = objItem.InstallDate
Cells(i, 7) = objItem.FreeSpace
Cells(i, 8) = objItem.MediaType
Cells(i, 9) = objItem.PNPDeviceID
Cells(i, 10) = objItem.Name
Cells(i, 11) = objItem.PNPDeviceID
Cells(i, 12) = objItem.PowerManagementCapabilities
Cells(i, 13) = objItem.PowerManagementSupported
'Cells(i, 14) = objItem.ProtocolSupported
Cells(i, 15) = objItem.Status
Cells(i, 16) = objItem.StatusInfo
Cells(i, 17) = objItem.SystemCreationClassName
Cells(i, 18) = objItem.SystemName
Cells(i, 19) = objItem.TimeOfLastReset
Cells(i, 20) = objItem.VolumeDirty
Cells(i, 21) = objItem.SystemName
Cells(i, 22) = objItem.VolumeName
Cells(i, 23) = objItem.VolumeSerialNumber
Next
End Sub