Возникла необходимость програмно обращаться с определенному флеш-накопителю. Так как эти девайсы монтируются часто под разными буквами, в зависимости от порта, порядка подключения, начал искать варианты однозначного определения сабжа.
Изначально думал заставить монтироваться флешку всегда на одну-единственную букву, но к сожалению однозначного решения не нашел.
Поэтому решил определять эту букву по какому-нибудь 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