Страницы: 1
RSS
HDD SerialNumber [vba], Узнать реальный серийный номер
 
здравствуйте
Код
Sub qw()
Info = ""
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colDiskDrives = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive")
For Each objDrive In colDiskDrives
    Info = Info & "Caption: " & objDrive.Caption: Info = Info & vbCrLf
    Info = Info & "DeviceID: " & objDrive.DeviceID: Info = Info & vbCrLf
    Info = Info & "SerialNumber: " & objDrive.SerialNumber: Info = Info & vbCrLf
Info = Info & vbCrLf: Info = Info & vbCrLf
Next
'[a1] = Info: [a1].WrapText = False
MsgBox Info
End Sub


objDrive.SerialNumber выводит серийник жёсткого диска в виде строки длинной 40 символов. как её преобразовать в стандартный вид?
макрос в примере
спасибо

P.S.
1. в MSDN есть пример выполнения этого свойства. там в примере написано "Example: WD-WM3493798728", а не строка из 40 символов как получается у меня
2. objDrive.SerialNumber не работает в Windows XP. только на висте и выше
Изменено: KUDRIN - 11.07.2013 13:00:31
 
MsgBox Hex$(CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber)
 
У меня тот верхний код вообще не работает.
Работает такой:
Код
Sub t()
    MsgBox Nomer_Drive
End Sub

Function Nomer_Drive() As String
    Dim queryObj As Object
    Dim ppid As String

    For Each queryObj In GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='IDE'")
        ppid = ppid & "Надпись:" & queryObj.Caption & vbCrLf
        ppid = ppid & "Модель:" & queryObj.Model & vbCrLf
        ppid = ppid & "Заводской номер:" & queryObj.Signature & vbCrLf
    Next
    Nomer_Drive = ppid
End Function
 
Цитата
Hugo пишет:
У меня тот верхний код вообще не работает.
У меня тоже вылетает в ошибку.
 
Цитата
Юрий М пишет:
MsgBox Hex$(CreateObject("Scripting.FileSystemObject").GetDrive("C").SerialNumber)

это серийный код логического тома  :(  они отличаются с тем, который написан на самом физическом жестком диске.
написанный серийник на самом жестком диске должна выдавать как раз objDrive.SerialNumber. имеет вид типа WD-WM3493798728
Цитата
Hugo пишет:
У меня тот верхний код вообще не работает.
предположение - возможно из-за системы XP?
пока искал эти коды, где то читал что какой то из них под XP не работает. ну да это не важно, потому что

в Вашем коде добавленная мною строчка queryObj.SerialNumber должна выдавать серийник. а выдает 40 символов. в MSDN есть пример выполнения этого свойства. там в примере написано "Example: WD-WM3493798728".

код с добавленной проблемной строчкой queryObj.SerialNumber:
Код
Sub t()
    MsgBox Nomer_Drive
End Sub

Function Nomer_Drive() As String
    Dim queryObj As Object
    Dim ppid As String

    For Each queryObj In GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='IDE'")
        ppid = ppid & "Надпись:" & queryObj.Caption & vbCrLf
        ppid = ppid & "Модель:" & queryObj.Model & vbCrLf
        ppid = ppid & "Заводской номер:" & queryObj.Signature & vbCrLf
        ppid = ppid & "Серийный номер:" & queryObj.SerialNumber & vbCrLf
    Next
    Nomer_Drive = ppid
End Function
Изменено: KUDRIN - 10.07.2013 00:47:03
 
проверил, действительно свойство .SerialNumber не работает именно в XP. в Win7 работает даже в 2003 офисе.
(и в msdn тоже написано "Windows Server 2003 and Windows XP: This property is not available." )  
ну вот что у меня выдаёт вместо серийников:
Изменено: KUDRIN - 10.07.2013 01:04:21
 
Все вышеприведенные коды не получают физический SN диска(Винчестера)
пользуюсь этим:
Скрытый текст


Код
Sub test()
MsgBox stdrvNumber()
End Sub
Изменено: R Dmitry - 10.07.2013 21:22:40
Спасибо
 
такой огромный код с кучей внутренних функций, а показывает только серийник и только одного жесткого диска. может я его неправильно использую, внутри копаться не стал

только для серийника сразу для всех жестких дисков можно использовать такой код
Скрытый текст
Изменено: KUDRIN - 10.07.2013 22:10:12
 
для серийника + логические тома на всех жестких дисках можно использовать такой,
только это всё оффтопик  :)  
Скрытый текст
Изменено: KUDRIN - 10.07.2013 22:10:26
 
Цитата
R Dmitry пишет:
Все вышеприведенные коды не получают физический SN диска(Винчестера)
насчет Win32_DiskDrive.SerialNumber в MSDN написано обратное  :D
только у меня он выдает в непонятной форме этот серийник. тема и была создана с целью преобразования из непонятного в стандартный вид
Изменено: KUDRIN - 10.07.2013 22:13:21
 
Уважаемый KUDRIN, в моем случае я знаю как найти серийный номер железа.
Вы же его найти не сумели
Спасибо
 
оффтопик
Изменено: KUDRIN - 11.07.2013 12:11:53
 
Цитата
KUDRIN пишет:
это серийный код  логического  тома
НЕ понимаю... Каким образом завод-изготовитель может присвоить серийный номер ЛОГИЧЕСКОМУ диску?
 
оффтопик
Изменено: KUDRIN - 11.07.2013 12:07:57
 
Цитата
KUDRIN пишет:
а откуда такая логика, что завод присваивает серийный номер логическому диску?
Вот и я спрашиваю))) Серийный номер, как я понимаю,- номер изделия.
 
оффтопик
Изменено: KUDRIN - 11.07.2013 12:11:08
 
Наверное, ошибка в терминологии: на мой взгляд, не может быть СЕРИЙНОГО номера у ЛОГИЧЕСКОГО диска.
 
оффтопик
Изменено: KUDRIN - 11.07.2013 12:32:14
 
KUDRIN, Ваша ирония неуместна: я высказал СВОЁ мнение, что неудачная терминология. Само слово СЕРИЙНЫЙ мною воспринимается применительно к физическим изделиям.
Хотите написать - пишите. Только Intel здесь причём?
 
оффтопик
Изменено: KUDRIN - 11.07.2013 12:46:51
 
Да не считаю я непозволительной - считаю некорректной. Вы сами в этом могли убедиться, прочитав ответы в этой теме: два одинаковых понятия "Серийный номер" имеют два совершенно разных значения. Не должно такого быть. Нужно как-то разделять. И ничего я Вам не приписывал.
 
оффтопик
Изменено: KUDRIN - 11.07.2013 12:52:30
 
Если исходить из скрина - я бы назвал "Серийный номер порта" или  "Серийный номер логического диска". А просто "Серийный номер" - к железу. Но это никак не поможет в решении Вашего вопроса.
P.S. Если Вам действительно нужно узнать номер физического устройства, то почему ТОЛЬКО по предлагаемому варианту, а другие не устраивают? Вам ведь нужен результат?
 
оффтопик

Цитата
P.S. Если Вам действительно нужно узнать номер физического устройства, то почему ТОЛЬКО по предлагаемому варианту, а другие не устраивают? Вам ведь нужен результат?
в том то и дело, что мне не нужно узнать номер физического устройства. нужно преобразовать 40-значную строку, показывающую серийный номер физического жесткого диска, в стандартный вид.
в MSDN же написано не "Example: 2020202057202d4443571111193845", а "Example: WD-WM3493798728".
интересует, почему команда выдаёт результат не в том виде. а для нахождения серийника жесткого диска есть более 5 других способов

наверное я не так тему назвал, наверное "преобразовать строку Win32_DiskDrive.SerialNumber" смотрелось бы более конкретно и соответствовало бы вопросу в 1ом сообщении
Изменено: KUDRIN - 11.07.2013 13:23:42
Страницы: 1
Читают тему
Наверх