powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить код экземпляра устройство (серийный номер флэшки)
25 сообщений из 40, страница 1 из 2
Получить код экземпляра устройство (серийный номер флэшки)
    #35818018
sadem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток всем! Прошу прощения за избитую наверно уже тему (про серийный номер), но в поисковике ничего дельного не нашел, в т.ч. и на этом сайте. Может здесь кто, что подскажет.
То, что выдали мне поисковики - это порядка 30 примеров одного и того же, но в разных интерпретациях. Суть этих пример - они получают не реальный серийный номер USB устройства, а всего лишь номер тома, который при форматировании меняется! Их можно свести к трем:
1. Dim FSO, DRV
Set FSO = CreateObject("Scripting.FileSystemObject")
Set DRV = FSO.GetDrive("E:")
MsgBox Hex$(DRV.SerialNumber)
Set DRV = Nothing
Set FSO = Nothing
2. С использованием GetVolumeInformation
3. Поиск устройств в реестре, но при этом в реестре сохраняются все старые флэшки которые были когда-то вставлены в данный ПК (хотя, наверно, в этом примере выдается уже реальный s/n).

Но повторюсь - они выдают серийный номер тома , а нужен серийный номер устройства (который при форматировании не измеется).

Как получить серийный номер (если возможно) дискового устройства по букве его тома?

Или подскажите как получить Vendor ID (Код экземпляра устроства USB). Здесь уж напрямую зашит серийник и его можно посмотреть через Диспетчер устройств->Дисковые устройства->USB Flash Drive (в свойствах).

Видел на Delphi что-то подобное реализовывали, можно ли считать Vendor ID устройства в VB6?
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #35818033
Фотография Restavraciya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот код возвращает то что в свойствах юсб устройства (диспетчер-дисковые-...)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim obj, objs, buf, PnPID

' Get the PnPDevice ID
Set objs = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")
For Each obj In objs
      If obj.InterfaceType = "USB" Then
            'buf = "Model: " & obj.Model & vbcr
            'buf = buf & "PnP Device ID: " & obj.PnPDeviceID
            PnPID = obj.PnPDeviceID
            'msgbox(buf)
      End If
Next

' fix up the PnPDevice ID to make it suitable for comparing against the Association
PnPID = Replace(PnPID, "\", "\\") & Chr( 34 )

' Use WMI associations to pair up USBContoller and PnPEntity
Set objs = GetObject("winmgmts:").InstancesOf("Win32_USBControllerDevice")
For Each obj In objs
      If Right(obj.Dependent, Len(PnPID)) = PnPID Then
            Debug.Print (PnPID & vbCr & obj.Dependent & vbCr & obj.Antecedent)
      End If
Next
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #35818036
Фотография Restavraciya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы: то что в коде экземпляра устройства
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #35818105
sadem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Restavraciya, могу только сказать "БРАВО!" Кратко и по делу. Именно то, что нужно. Огромное спасибо!
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36177875
apollo25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Restavraciya[Этот код возвращает то что в свойствах юсб устройства (диспетчер-дисковые-...)]
Здравствуйте, Уважаемый!
Не могли бы Вы растолковать мне, незнакомому с VB, как запустить этот код в WinXP SP3.
Я сохранил код в EmEditor-е как PnPID.vbs. Запускаю оный двумя щелчками ЛКМ, а он выдает:
Windows Script Host
Сценарий: D:\Admin\Apollo\General\Hardware\PCIDev\PnPID\PnPID.vbs
Строка: 21
Символ: 13
Oшибкa: Oбъeкт нe пoддepживaeт этo cвoйcтвo или мeтoд: 'Debug.Print'
Кoд: 800A01B6
Иcтoчник: Oшибкa выпoлнeния Microsoft VBScript

Слыхал, что есть разный VB (VB, VBA, VBS...).
Может по этому скрипт у меня не работает? Что ему не хватает?
Ответьте, пожалуйста! Заранее спасобо!
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36177897
sadem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
apollo25, Debug.Print - это команда компилятору в VB, VBS ее не понимает. Попробуй более сокращенный код переделать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    Set OBJs = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")
    For Each OBJ In OBJs
        If OBJ.InterfaceType = "USB" Then
            SN = OBJ.PnPDeviceID
            Model = OBJ.Model
        End If
    Next
    Set OBJs = Nothing

Здесь без оператора вывода, все остальное добавляешь сам.
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36180037
apollo25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sadem
Здесь без оператора вывода, все остальное добавляешь сам.
Благодарю за помощь, Уважаемый!
Но... я же писал..."незнакомому с VB", далек я от написания скриптов, к сожалению.
Не могли бы Вы указать что на что заменить, куда этот кусок добавить, как для тех, кто в танке.
Буду очень благодарен!
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36783192
knsFear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UP. Как узнать букву(метку) устройства?
Заранее спасибо
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36783194
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
knsFearUP. Как узнать букву(метку) устройства?
1) Так букву или метку?
2) Исходя из каких данных?
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36783237
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apollo25,
код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
'*******************************************************************
' Имя: usb.vbs
' Язык: VBScript                                                   
' Описание: Класс Win32_DiskDrive предоставляет сведения о дисководах                             
'*******************************************************************
'********************Переменные**************************
Dim obj, objs, buf, PnPID ,strtemp
'**********************Начало********************************
Set objs = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")
For Each obj In objs
    If obj.InterfaceType = "USB" Then
        PnPID = obj.PnPDeviceID
	End If
Next
PnPID = Replace(PnPID, "\", "\\") & Chr( 34 )
Set objs = GetObject("winmgmts:").InstancesOf("Win32_USBControllerDevice")
For Each obj In objs
    If Right(obj.Dependent, Len(PnPID)) = PnPID Then
            strtemp= strtemp & PnPID & vbCr & obj.Dependent & vbCr & obj.Antecedent
    End If
Next
MSGBOX strtemp ' выводим сообщение
'**********************Конец***************************************
'.SystemName 'имя компьютера
'.Caption 'наименование устройства
'.Model 'модель, указанная производителем
'.Description 'описание устройства
'.DeviceID 'идентификатор устройства
'.PNPDeviceID 'идентификатор устройства Plug-and-Play
'.Manufacturer 'производитель
'.Index 'номер диска (если 0xFF - не отображает физический диск)
'.InterfaceType 'тип интерфейса (IDE, SCSI)
'.MediaType 'тип носителя (Removable media, Fixed hard disk и т.д.)
'.SCSIBus 'номер шины SCSI
'.SCSILogicalUnit 'номер SCSI устройства
'.SCSIPort 'номер порта SCSI
'.SCSITargetId 'идентификационный номер SCSI
'.TotalHeads 'количество головок
'.BytesPerSector 'количество байт в секторе
'.SectorsPerTrack 'количество секторов на дорожке
'.TracksPerCylinder 'количество дорожек в цилиндре
'.TotalCylinders 'количество цилиндров
'.TotalSectors 'общее количество секторов
'.TotalTracks 'общее количество дорожек
'.Size 'размер диска (по количеству цилиндров, дорожек, секторов и размеру сектора)
'.Partitions 'количество разделов на диске

если лень копировать , файл приложил)
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36808614
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

Делаю так:
Пуск Наведя на Мой компьютер правой клавишей мыши нажимаю на Управление, затем нажимаю на управление дисками и вижу нижеследующую картинку: 10 столбцов, но относительно флешки Кингстон, которая вставлена в гнездо разъёма, нет столбца: Vendor ID (Код экземпляра устроства USB)???
Или я что то не то делаю?????
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36813984
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,
Выполняя скрипт от 10 авг 10, 05:50 получаю МСГ бокс, который выводит три строки:
1 строка, это Код экземпляра устройства
USBSTOR\\DISK&VEN_KINGSTON&PROD_DT_101_II&REV_1.00\\001D0F0CAABFF9A145A00DAC&0"
Это значение можно посмотреть: Мой компьютер - Правая клавиша мыши - Свойства - Оборудование - Диспетчер устройств - Дисковые устройства, выбираем, например Kingston DT 101 II USB Device. Выделив его, нажать Свойства
Код экземпляра устройства

2 и 3 строку как закомментировать ???????????????????????

\\PRIVATE-1598B4D\root\cimv2:Win32_PnPEntity.DeviceID="USBSTOR\\DISK&VEN_KINGSTON&PROD_DT_101_II&REV_1.00\\001D0F0CAABFF9A145A00DAC&0"


\\PRIVATE-1598B4D\root\cimv2:Win32_USBController.DeviceID="PCI\\VEN_8086&DEV_3A3C&SUBSYS_50028086&REV_00\\3&11583659&0&D7"

И если нужен только Код экземпляра устройства делаем так, имеется ввиду макрос в сообщении от 10 авг 10, 05:50, а оконцовка такая?????

Код: plaintext
1.
2.
3.
4.
5.
6.
For Each obj In objs
If Right(obj.Dependent, Len(PnPID)) = PnPID Then
Код_экземпляра_устройства= strtemp & PnPID & vbCr & obj.Dependent & vbCr & obj.Antecedent
Exit Sub
End If
Next
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36814082
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждую строчку комментировать - нет смысла. И так ясно из контекста задачи, что возвращается
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36814095
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD, рад за Вас, что нет для Вас смысла и Вам всё понятно, но для меня вопрос не снят
Не знаю поэтому и спрашиваю, подскажите скажу спасибо, нет нет
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36814302
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,
ну у вас там цикл ,что хотите комментировать че то я не понял?
скорее всего вам так надо
Код: plaintext
1.
Код_экземпляра_устройства= Код_экземпляра_устройства & PnPID & vbCr & obj.Dependent & vbCr & obj.Antecedent
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36817008
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm, у Вас ход мыслей интересный, в Вашем коде от 10 авг 10, 05:50 имеем два цикла и PnPID во втором цикле будет обрабатывать последнее PnPID первого цикла

Вот нижеследует код, получаю после его прохождения ответ
Устройства = 6
USB_устройства = 5
Но я то знаю, что USB устройств реально подсоединённых к компьютеру 1, как узнать строго подсоединённые USB устройства???????????
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
'класс Win32_DiskDrive предоставляет сведения о дисководах
Dim obj, objs, buf, PnPID, strtemp
Set objs = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")
Устройства =  0 
USB_устройства =  0 
For Each obj In objs
Устройства = Устройства +  1 
Тип_устройства = obj.InterfaceType 'типы устройства бывают: IDE, USB
If obj.InterfaceType = "USB" Then
USB_устройства = USB_устройства +  1 
PnPID = obj.PnPDeviceID
End If
Next
Потом двинусь дальше
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36817015
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, а SATA устройства не подсчитает???
Если да то как
Я так понимаю жесткие диски и дисководы будет считать в зависимости от интерфейса подключения IDE или SATA????
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36817101
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,
Код: plaintext
'класс Win32_DiskDrive предоставляет сведения о дисководах
видимо SATA тоже будет поддерживать
>USB_устройства = 5
ну это нормально , у вас там типо концентратор стоит наверно и еще может ерунда какая нибудь
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36817109
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm, ответили на всё кроме главного
USB_устройства = 5
Но я то знаю, что USB устройств реально подсоединённых к компьютеру 1, как узнать строго подсоединённые USB устройства???????????
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36817153
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,
проверил:
Тип_устройства = obj.InterfaceType 'типы устройства бывают: IDE, USB, SATA но SATA определяет как IDE????????????????? и как же уточнить и разграничить????
Узнал опытгым путём показываеи диск Макстор как иде но я точно знаю, что он сата не поленился крышку окрыл так и есть!!!!
А еще есть вот эти забыл как абревиатура, новые твёрдотельные с ними как????
Вопрос на вопросе
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36817393
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
On Error Resume Next
 
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
 
For Each objItem In colItems
	strtemp=strtemp+ "_______________________________________________"+ chr( 13 )
	strtemp=strtemp+ "_______________________________________________"+ chr( 13 )
        strtemp=strtemp+ "Caption: " & objItem.Caption + chr( 13 )
        strtemp=strtemp+ "InterfaceType: " & objItem.InterfaceType + chr( 13 )
        strtemp=strtemp+ "DeviceID: " & objItem.DeviceID + chr( 13 )
        strtemp=strtemp+ "Name: " & objItem.Name + chr( 13 )
        strtemp=strtemp+ "Status: " & objItem.Status + chr( 13 )
        strtemp=strtemp+ "_______________________________________________"+ chr( 13 )
	strtemp=strtemp+ "_______________________________________________"+ chr( 13 )
Next
WScript.Echo strtemp
попробуйте этот код
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36817514
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,
1.чуть переделал для русскоязычных
2.добавил objItem.PnPDeviceID
3.Что такое WScript.Echo strtemp?????????????????
4.Думал objItem.Status решит задачу если ОК значит подсоединено, если не ОК значит не подсоединено, так как же узнать все реально подсоединённые устройства?????????????

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
On Error Resume Next
 
Const wbemFlagReturnImmediately = &H10
Const wbemFlagForwardOnly = &H20
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
 
For Each objItem In colItems
    strtemp = strtemp + "_______________________________________________" + Chr( 13 )
    strtemp = strtemp + "_______________________________________________" + Chr( 13 )
    strtemp = strtemp + "Заголовок устройства: " & objItem.Caption + Chr( 13 )
    strtemp = strtemp + "Тип устройства: " & objItem.InterfaceType + Chr( 13 )
    strtemp = strtemp + "ID устройства: " & objItem.DeviceID + Chr( 13 )
    strtemp = strtemp + "PnP ID устройства: " & objItem.PnPDeviceID + Chr( 13 )
    strtemp = strtemp + "Имя устройства: " & objItem.Name + Chr( 13 )
    strtemp = strtemp + "Состояние устройства: " & objItem.Status + Chr( 13 )
    strtemp = strtemp + "_______________________________________________" + Chr( 13 )
    strtemp = strtemp + "_______________________________________________" + Chr( 13 )
Next

Selection.TypeText Text:=strtemp
WScript.Echo strtemp
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36817536
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,
И потом когда узнаю подсоединено устройство или нет как узнать под какой оно буквой в системе?????????
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36829168
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,
'обнаружение подключенных на компьютере USB накопителей сделал, подскажите пожалуйста как определить ID устройства

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Dim objWMI, objCollection, objItem, objWSNet
Dim objLogicalDisks, objLD, objPartitions, objPart
Dim strComputer, strTemp
strComputer = "."
Set objWMI = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\root\cimv2")
Set objCollection = objWMI.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=2")
Количество_подсоединённых_USB_устройств =  0 
For Each objItem In objCollection
Set objLogicalDisks = objWMI.ExecQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=""" & _
objItem.DeviceID & """} WHERE AssocClass=Win32_LogicalDiskToPartition")
For Each objLD In objLogicalDisks
Set objPartitions = objWMI.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & _
objLD.DeviceID & """} WHERE AssocClass=Win32_DiskDriveToDiskPartition")
For Each objPart In objPartitions
strTemp = strTemp & objItem.DeviceID & " => " & objPart.Caption & " (Диск " & objPart.Index & ")" & vbNewLine
Буква_съемного_диска = objItem.DeviceID
Имя_съёмного_диска = objPart.Caption
Порядковый_номер_накопителя_на_момент_запроса = objPart.Index
Имя_съёмного_диска_его_буква = objPart.Caption & " " & objItem.DeviceID
Количество_подсоединённых_USB_устройств = Количество_подсоединённых_USB_устройств +  1 
Next
Set objPart = Nothing
Set objPartitions = Nothing
Next
Set objLD = Nothing
Set objLogicalDisks = Nothing
Next
Set objItem = Nothing
Set objCollection = Nothing
Set objWMI = Nothing

If Len(strTemp) =  0  Then MsgBox$ "На компьютере USB накопителей не обнаружено", vbOKOnly, "Отчёт" Else MsgBox$ strTemp, vbOKOnly, "Отчёт"
...
Рейтинг: 0 / 0
Получить код экземпляра устройство (серийный номер флэшки)
    #36829565
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

круто, даже в Excel код работает.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить код экземпляра устройство (серийный номер флэшки)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]