Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/35: Рейтинг темы: голосов - 35, средняя оценка - 4.51
6 / 6 / 1
Регистрация: 04.11.2014
Сообщений: 20

Определение серийного номера жесткого диска

12.02.2015, 07:59. Показов 6577. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени!
Несколько лет назад на просторах инета нашел код програмки на С#, определение серийного номера жесткого диска. Переделал его по vb.net и успешно использовал, но вот недавно обнаружилась такая проблема. На некоторых компах серийник определяет только если в компе присутствует флешка. Есть флешка - определяет серийник, нет флешки - не определяет! Причем столкнулся с этой проблемой сначала на пару компах с ХР, потом на другом на 8ке и на том же компе на 10ке.
Сам понять не могу, почему флешка влияет на определения серийника HD. Может кто сталкивался с такой проблемой!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2015, 07:59
Ответы с готовыми решениями:

Получить аппаратный номер жесткого диска
Всем привет. Подскажите, пожалйуста, как узнать аппаратные номер жесткого диска ? (visual basic 2005). Спасибо

Cерийный номер жесткого диска. Не работает в Windows XP
Привет всем форумчане, я хочу использовать этот код но, он не работает на виндовс ХР почему? Dim GetQuery As String = ("SELECT *...

Используя RegOpenKey, RegQueryValueEx, RegCloseKey, определить идентификатор жесткого диска
Используя RegOpenKey, RegQueryValueEx, RegCloseKey, определить идентификатор жесткого диска ...

15
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
12.02.2015, 11:15
А код то покажи?
0
6 / 6 / 1
Регистрация: 04.11.2014
Сообщений: 20
12.02.2015, 21:13  [ТС]
VB.NET Скопировано
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
<STAThread()> _
        Public Shared Sub Main(ByVal args As String())
            Dim hdCollection As New ArrayList()
 
            Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
 
            For Each wmi_HD As ManagementObject In searcher.[Get]()
                Dim hd As New HardDrive()
                hd.Model = wmi_HD("Model").ToString()
                hd.Type = wmi_HD("InterfaceType").ToString()
 
                hdCollection.Add(hd)
            Next
 
            searcher = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
 
            Dim i As Integer = 0
            For Each wmi_HD As ManagementObject In searcher.[Get]()
                ' get the hard drive from collection
                ' using index
                Dim hd As HardDrive = DirectCast(hdCollection(i), HardDrive)
 
                ' get the hardware serial no.
                If wmi_HD("SerialNumber") Is Nothing Then
                    hd.SerialNo = "s/n_None"
                Else
                    hd.SerialNo = wmi_HD("SerialNumber").ToString()
                End If
 
                If i < hdCollection.Count - 1 Then
                    i += 1
                End If
            Next
 
            ' Display available hard drives
            Using file As New System.IO.StreamWriter("snd.inf")
 
                For Each hd As HardDrive In hdCollection
                    MsgBox(hd.SerialNo)
                    file.WriteLine(hd.SerialNo)
                    file.WriteLine("Model" & vbTab & vbTab & ": " & hd.Model)
                    file.WriteLine("Type" & vbTab & vbTab & ": " & hd.Type)
                    file.WriteLine("----------")
                Next
            End Using
                   End Sub
Вот код основной части

Добавлено через 9 минут
Определяет и записывает в файл серийник, модель и тип носителя, последовательно для всех подключенных, включая и флешки...
1
6 / 6 / 1
Регистрация: 04.11.2014
Сообщений: 20
17.02.2015, 17:15  [ТС]
Что то тихо...
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9649 / 4802 / 762
Регистрация: 17.04.2012
Сообщений: 9,638
Записей в блоге: 14
17.02.2015, 17:31
Это, видимо, нужно спрашивать у наших виндоскриптоводов: VBScript/JScript/WSH/WMI/HTA. Наверное, какая-то особенность работы WMI-запроса.
0
9 / 9 / 3
Регистрация: 14.03.2013
Сообщений: 107
18.02.2015, 11:58
VB.NET Скопировано
1
2
3
4
5
Friend Function GetSerialHDD(Optional ByVal strDriveLetter As String = "c") As String
        Dim disk As ManagementObject = New ManagementObject(String.Format("win32_logicaldisk.deviceid=""{0}:""", strDriveLetter))
        disk.Get()
        Return disk("VolumeSerialNumber").ToString()
    End Function
0
6 / 6 / 1
Регистрация: 04.11.2014
Сообщений: 20
18.02.2015, 13:32  [ТС]
Как я понял определяется серийный номер логического диска, если переустановить винду, номер измениться...
0
6 / 6 / 1
Регистрация: 04.11.2014
Сообщений: 20
12.10.2015, 09:41  [ТС]
Ответ к своему вопросу я нашел, но если кому интересно подумать, то подскажу. Ошибка кроется в строках 30-32.
Удачи!
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9649 / 4802 / 762
Регистрация: 17.04.2012
Сообщений: 9,638
Записей в блоге: 14
12.10.2015, 12:28
rimco, единицу не нужно было отнимать?
0
6 / 6 / 1
Регистрация: 04.11.2014
Сообщений: 20
12.10.2015, 12:45  [ТС]
если в компе установлен всего 1 диск, то он определяется под номером 0, а в данном коде как номер 1(которого нет).
Вот и получается, что если вставить флешку то в коллекцию заносится 2 диска и правильно определяется оба...

Добавлено через 10 минут
Вот еще вопрос! Почему данный код на 7ке работает стабильно, а на некоторых ХР иногда не определяет (оч.редко)?
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9649 / 4802 / 762
Регистрация: 17.04.2012
Сообщений: 9,638
Записей в блоге: 14
12.10.2015, 16:35
Цитата Сообщение от rimco Посмотреть сообщение
Почему данный код на 7ке работает стабильно, а на некоторых ХР иногда не определяет
Если верить документации, то Win32_DiskDrive вообще недоступен на XP
Requirements

Minimum supported client
Windows Vista

Minimum supported server
Windows Server 2008
Вполне вероятно, что это ошибочно, и в поздних сервис-паках эта возможность работала. Поэтому моё предположение - зависит от номера SP.
0
6 / 6 / 1
Регистрация: 04.11.2014
Сообщений: 20
12.10.2015, 18:04  [ТС]
Если верить документации, то Win32_DiskDrive вообще недоступен на XP
тестировалось начиная XP SP2, работало безупречно, но вот на одной машине ХР SP3 не хочет
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9649 / 4802 / 762
Регистрация: 17.04.2012
Сообщений: 9,638
Записей в блоге: 14
12.10.2015, 18:14
rimco, теперь не знаю, идеи кончились.
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
12.10.2015, 21:48
rimco, как минимум ограничьте выборку по запросам:
VB.NET Скопировано
1
2
3
"Select * from Win32_DiskDrive where deviceid like '%physicaldrive%'"
и
"Select * from Win32_PhysicalMedia Where Tag like '%physicaldrive%'"
Цитата Сообщение от rimco Посмотреть сообщение
Ошибка кроется в строках 30-32.
На самом деле ошибка кроется в Вашем предположении о том, что результаты запросов содержат одинаковое количество записей и в той же последовательности.
Например, имеем комп с одним HD и одним виртуальным CD
Результатом первого запроса будет одна запись о HD
Результатом второго запроса будут две записи о HD и CD. При обработке первой записи запишется серийник HD, при обработке второй записи он затрется серийником CD (но скорее он отсутствует), т.к. переменая i останется равной 0.
Для одного и того же устройства поле deviceid из первого запроса должно равняться полю Tag из второго запроса ... я бы для сопоставления записей использовал словарь
1
6 / 6 / 1
Регистрация: 04.11.2014
Сообщений: 20
12.10.2015, 22:50  [ТС]
Step_UA, возможно вы правы, но в конкретном примере проблема в цикле For Each... делается лишний проход который и затирает значение серийника...
0
6 / 6 / 1
Регистрация: 04.11.2014
Сообщений: 20
07.01.2020, 15:07  [ТС]
В продолжении темы!
может кто то сталкивался с такой ситуацией:
Пример:
-при определении серийного номера из под админа
дает результат JP1570FR0KRWDK
-простой запуск PJ5107RFK0WRKD
Вопрос! почему происходит попарный реверс знаков?
у меня идей нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2020, 15:07
Помогаю со студенческими работами здесь

Как правильно использовать WMI (получить сериный номер жесткого диска)
Здравствуйте! Пишу программу в VB 2010, Windows 7, 64 bit. Для нахождения серийника винта пробовал код: Public Function GetHDDIDWMI()...

Определение параметров диска (Серийного номера, файловой системы)
Всем привет, мб у кого нить завалялась программа определения серийного номера,файловой системы диска Скиньте пожалуйста.

Получение серийного номера диска с помощью GetVolumeInformation
Хотел вывести серийный номер диска, ошибка на строку вызова функции public partial class Form1 : Form { ...

Определение серийного номера при подключении usb. В чем ошибка?
Так отслеживаю подключение и отключение флешки: protected override void WndProc(ref Message m) { ...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер