Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получить код экземпляра устройство (серийный номер флэшки) / 25 сообщений из 40, страница 1 из 2
15.02.2009, 10:57
    #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
15.02.2009, 11:50
    #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
15.02.2009, 11:53
    #35818036
Restavraciya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
зы: то что в коде экземпляра устройства
...
Рейтинг: 0 / 0
15.02.2009, 13:40
    #35818105
sadem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
Restavraciya, могу только сказать "БРАВО!" Кратко и по делу. Именно то, что нужно. Огромное спасибо!
...
Рейтинг: 0 / 0
03.09.2009, 22:17
    #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
03.09.2009, 22:43
    #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
05.09.2009, 00:58
    #36180037
apollo25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
sadem
Здесь без оператора вывода, все остальное добавляешь сам.
Благодарю за помощь, Уважаемый!
Но... я же писал..."незнакомому с VB", далек я от написания скриптов, к сожалению.
Не могли бы Вы указать что на что заменить, куда этот кусок добавить, как для тех, кто в танке.
Буду очень благодарен!
...
Рейтинг: 0 / 0
10.08.2010, 01:20
    #36783192
knsFear
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
UP. Как узнать букву(метку) устройства?
Заранее спасибо
...
Рейтинг: 0 / 0
10.08.2010, 01:24
    #36783194
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
knsFearUP. Как узнать букву(метку) устройства?
1) Так букву или метку?
2) Исходя из каких данных?
...
Рейтинг: 0 / 0
10.08.2010, 05:50
    #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
24.08.2010, 16:31
    #36808614
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
aduka05adm,

Делаю так:
Пуск Наведя на Мой компьютер правой клавишей мыши нажимаю на Управление, затем нажимаю на управление дисками и вижу нижеследующую картинку: 10 столбцов, но относительно флешки Кингстон, которая вставлена в гнездо разъёма, нет столбца: Vendor ID (Код экземпляра устроства USB)???
Или я что то не то делаю?????
...
Рейтинг: 0 / 0
26.08.2010, 18:41
    #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
26.08.2010, 19:45
    #36814082
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
Каждую строчку комментировать - нет смысла. И так ясно из контекста задачи, что возвращается
...
Рейтинг: 0 / 0
26.08.2010, 19:58
    #36814095
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
VSVLAD, рад за Вас, что нет для Вас смысла и Вам всё понятно, но для меня вопрос не снят
Не знаю поэтому и спрашиваю, подскажите скажу спасибо, нет нет
...
Рейтинг: 0 / 0
26.08.2010, 23:18
    #36814302
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
Ципихович Эндрю,
ну у вас там цикл ,что хотите комментировать че то я не понял?
скорее всего вам так надо
Код: plaintext
1.
Код_экземпляра_устройства= Код_экземпляра_устройства & PnPID & vbCr & obj.Dependent & vbCr & obj.Antecedent
...
Рейтинг: 0 / 0
28.08.2010, 14:54
    #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
28.08.2010, 15:03
    #36817015
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
кстати, а SATA устройства не подсчитает???
Если да то как
Я так понимаю жесткие диски и дисководы будет считать в зависимости от интерфейса подключения IDE или SATA????
...
Рейтинг: 0 / 0
28.08.2010, 15:57
    #36817101
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
Ципихович Эндрю,
Код: plaintext
'класс Win32_DiskDrive предоставляет сведения о дисководах
видимо SATA тоже будет поддерживать
>USB_устройства = 5
ну это нормально , у вас там типо концентратор стоит наверно и еще может ерунда какая нибудь
...
Рейтинг: 0 / 0
28.08.2010, 16:01
    #36817109
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
aduka05adm, ответили на всё кроме главного
USB_устройства = 5
Но я то знаю, что USB устройств реально подсоединённых к компьютеру 1, как узнать строго подсоединённые USB устройства???????????
...
Рейтинг: 0 / 0
28.08.2010, 16:34
    #36817153
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
aduka05adm,
проверил:
Тип_устройства = obj.InterfaceType 'типы устройства бывают: IDE, USB, SATA но SATA определяет как IDE????????????????? и как же уточнить и разграничить????
Узнал опытгым путём показываеи диск Макстор как иде но я точно знаю, что он сата не поленился крышку окрыл так и есть!!!!
А еще есть вот эти забыл как абревиатура, новые твёрдотельные с ними как????
Вопрос на вопросе
...
Рейтинг: 0 / 0
28.08.2010, 23:31
    #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
29.08.2010, 07:16
    #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
29.08.2010, 09:33
    #36817536
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
aduka05adm,
И потом когда узнаю подсоединено устройство или нет как узнать под какой оно буквой в системе?????????
...
Рейтинг: 0 / 0
03.09.2010, 19:42
    #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
04.09.2010, 13:53
    #36829565
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить код экземпляра устройство (серийный номер флэшки)
Ципихович Эндрю,

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


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