Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
5 / 5 / 0
Регистрация: 15.04.2013
Сообщений: 118

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

06.10.2015, 21:34. Показов 2423. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Используя RegOpenKey, RegQueryValueEx, RegCloseKey, определить
идентификатор жесткого диска
(HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\S csi\Scsi Port 1\Scsi Bus 0\Target Id 0\Logical Unit Id 0)

Вот что я наделал, при запуске программа просто закрывается, не выдав никакого результата.
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
  Private Property MsgBox As String
 
    Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Integer, ByVal lpsubKey As String, ByRef phkResult As Integer) As Integer
 
    Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As Integer) As Integer
 
    Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, _
                                                                                         ByVal lpType As Integer, ByVal lpData As String, ByRef lpcb As Integer) As Integer
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim sDate As String
        Dim lres As Integer
        Dim retval As Integer
        Dim lDlen As Integer
        Dim hregkey As Integer
        Dim subkey As String
        subkey = "\HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus0\Target Id 0\Logical Unit Id 0"
        retval = RegOpenKey(&H80000002, subkey, hregkey)
        If retval <> 0 Then
            MsgBox = ("Ошибка открытия раздела")
            End
        End If
        sDate = Space(1024)
        lDlen = Len(sDate)
        lres = RegQueryValueEx(hregkey, subkey, 0, 0, sDate, lDlen)
        If lres <> 0 Then
            MsgBox = ("Ошибка считывания")
        End If
        retval = RegCloseKey(hregkey)
        TextBox1.Text = retval
    End Sub
Добавлено через 33 секунды
Может укажите или подскажите, что именно в ней не так?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.10.2015, 21:34
Ответы с готовыми решениями:

Узнать серийный номер жесткого диска, используя WinAPI
Например, хочу узнать серийный номер жесткого диска, используя WinAPI. Нашел функцию GetVolumeInformation:...

Определить состояние жесткого диска
Всем привет! Недавно комп начал дико тормозить, и заметил что от жесткого диска в такие моменты идут звуки, трудно их описать т.к. боюсь...

Определить дальнейшую судьбу жесткого диска
Прошло 3.5 года после покупки ноутбука и походу начал он помирать. Оцените состояние харда. Не пора ли его менять? Скрины смарта и...

5
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
07.10.2015, 09:41
Почему не пользуетесь встроенными средствами?
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
Imports Microsoft.Win32
 
Public Class Form1
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim RegKey As RegistryKey
        Dim AppRegKey As String = "HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 0\Target Id 0\Logical Unit Id 0"
        Dim Identifier As String
        RegKey = Registry.LocalMachine.OpenSubKey(AppRegKey)
        If IsNothing(RegKey) Then
            MsgBox("Ошибка открытия раздела")
        Else
            Identifier = RegKey.GetValue("Identifier")
            If IsNothing(Identifier) Then
                MsgBox("Ошибка считывания параметра")
            Else
                TextBox1.Text = Identifier
            End If
        End If
 
    End Sub
 
End Class
1
5 / 5 / 0
Регистрация: 15.04.2013
Сообщений: 118
07.10.2015, 20:54  [ТС]
Спасибо, конечно. Но нужно использовать именно эти функции (RegOpenKey, RegQueryValueEx, RegCloseKey). Это не моя прихоть, а задание преподавателя. Может сможете помочь?

Добавлено через 8 часов 14 минут
Нашел ошибку, почему программа закрывалась, был лишний "End". Стало
VB.NET
1
2
3
If retval <> 0 Then
            MsgBox = ("Ошибка открытия раздела")
        End If
Но все равно не выводит id диска.
0
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
08.10.2015, 10:39
Лучший ответ Сообщение было отмечено robert0801 как решение

Решение

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
Public Class Form1
    Private Const REG_SZ As Integer = 1
    Private Const HKEY_LOCAL_MACHINE As Integer = &H80000002
 
    Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Integer, ByVal lpsubKey As String, ByRef phkResult As Integer) As Integer
    Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As Integer) As Integer
    Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal lpType As Integer, ByVal lpData As String, ByRef lpcb As Integer) As Integer
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim subkey As String = "HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus0\Target Id 0\Logical Unit Id 0"
        Dim strValueName As String = "Identifier"
        Dim Ret As Integer, lValueType As Integer, lDataBufSize As Integer
        Dim strBuf As String = ""
        If RegOpenKey(HKEY_LOCAL_MACHINE, subkey, Ret) = 0 Then
            RegQueryValueEx(Ret, strValueName, 0, lValueType, 0, lDataBufSize)
            If lDataBufSize > 0 Then
                strBuf = StrDup(lDataBufSize, Chr(0))
                RegQueryValueEx(Ret, strValueName, 0, 0, strBuf, lDataBufSize)
                TextBox1.Text = strBuf
            Else
                MsgBox("Ошибка считывания")
            End If
        Else
            MsgBox("Ошибка открытия раздела")
        End If
    End Sub
 
End Class
1
5 / 5 / 0
Регистрация: 15.04.2013
Сообщений: 118
16.10.2015, 10:37  [ТС]
На другой машине программа не выполняется, т.к. отсутствует раздел \Scsi\Scsi Port 1\Scsi Bus0\Target Id 0\Logical Unit Id 0. В каком еще разделе реестра может находиться информация о идентификаторе жесткого диска?
0
 Аватар для PAnT0P
1492 / 587 / 107
Регистрация: 26.03.2012
Сообщений: 1,039
17.10.2015, 21:13
Цитата Сообщение от robert0801 Посмотреть сообщение
На другой машине программа не выполняется, т.к. отсутствует раздел \Scsi\Scsi Port 1\Scsi Bus0\Target Id 0\Logical Unit Id 0. В каком еще разделе реестра может находиться информация о идентификаторе жесткого диска?
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl Set\Enum\IDE
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2015, 21:13
Помогаю со студенческими работами здесь

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

Заводской номер жесткого диска, как определить?..
Подскажите... Заводской номер жесткого диска, как определить?.. И есть ли разница в определении если разные интерфейсы SCSI, IDE,...

Определить температуру процессора, жесткого диска и других устройств
Подскажите как определить температуру устройств ПК?

Замена жесткого диска - как определить поддерживает ли ноутбук большие диски?
Хочу заменить жесткий диск на ноутбуке на больший по объему. В связи с чем возник такой вопрос, как определить поддерживает ли ноутбук...

Как определить букву только что подключенного жесткого диска, флешки
Доброго времени суток.Как определить путь к только что подключенному жесткому диску,флешки? Событие подключения жесткого определяю так: ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru