Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для wakamon
0 / 0 / 1
Регистрация: 11.12.2014
Сообщений: 14

Чтение из реестра

22.12.2014, 14:08. Показов 2172. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь прочитать из реестра несколько данных, но выходит только одно в поле Memo.
Не видит следующего, из-за чего такое может быть?

C++
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
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
String ProductName;
if (reg) {
  reg->RootKey = HKEY_LOCAL_MACHINE;
  reg->OpenKey("Software\\Microsoft\\Windows NT\\CurrentVersion", false);
  ProductName = reg->ReadString("ProductName");
   reg->CloseKey();
  delete reg;
 reg = NULL;
}
Memo1->Lines->Add ("Имя ОС: "+ ProductName);
 
String VendorName;
if (reg) {
  reg->RootKey = HKEY_LOCAL_MACHINE;
  reg->OpenKey("SYSTEM\\ControlSet002\\services\\napagent\\Shas\\79744", false);
  VendorName = reg->ReadString("Vendor Name");
  reg->CloseKey();
  delete reg;
  reg = NULL;
}
Memo1->Lines->Add ("Изготовитель ОС: "+ VendorName);
 
String ProcessorName;
if (reg) {
  reg->RootKey = HKEY_LOCAL_MACHINE;
  reg->OpenKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\0", false);
  ProcessorName = reg->ReadString("ProcessorNameString");
  reg->CloseKey();
  delete reg;
  reg = NULL;
}
Memo1->Lines->Add ("Процессор: "+ ProcessorName);
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2014, 14:08
Ответы с готовыми решениями:

C++ чтение реестра
в общем, пишу функцию для поиска по реестру, но почему-то изначальный путь не тот. Пример: TRegistry *registr = new...

Чтение из реестра информации о модели USB
как прочитать подключи в реестре? Я уже раз 5 прочитал эту статью https://www.cyberforum.ru/cpp-builder/thread159991.html и пока что дело...

Чтение значения из параметра Реестра не выходит
Пытаюсь прочитать из параметра ProductName какая винда стоит, но выдает пустое сообщение пробывал OpenKey и одной строкой задавать ...

7
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
22.12.2014, 14:20
А вы уверены, что путь "HKLM\SYSTEM\ControlSet002\services\napa gent\Shas\79744" существует? У меня такого нет.

А последний путь неправильно написан, "\0" -- это нулевой символ в строке, а не бакслеш и "0".
0
 Аватар для wakamon
0 / 0 / 1
Регистрация: 11.12.2014
Сообщений: 14
22.12.2014, 14:28  [ТС]
Да, в реестре проверил, такое существует. Ошибку с \0 исправил, но все равно ничего не появляется в Memo.
Но с процессором должно же быть.
0
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
22.12.2014, 14:36
А чего вы ждете, если сначала написали
C++
1
reg = NULL;
А потом
C++
1
if (reg) {
0
 Аватар для wakamon
0 / 0 / 1
Регистрация: 11.12.2014
Сообщений: 14
22.12.2014, 14:43  [ТС]
Если я убираю эти строчки, то появляется ошибка Project1.exe raised exeption class EAccessViolation with message 'Acces violation at adress 00401C18 in module 'Project1.exe'. Read of adress 00000220. Process stopped
0
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
22.12.2014, 14:43
wakamon, конечно появится, вы же уничтожили экземпляр reg после чтения первого же значения. Зачем вы это сделали?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
22.12.2014, 14:50
C++
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
    TRegistry * reg = new TRegistry( KEY_ALL_ACCESS );
    String ProductName;
    if ( reg )
    {
        reg->RootKey = HKEY_LOCAL_MACHINE;
        reg->OpenKey( "Software\\Microsoft\\Windows NT\\CurrentVersion", false );
        ProductName = reg->ReadString( "ProductName" );
        reg->CloseKey( );
    }
    memo_1->Lines->Add( "Имя ОС: " + ProductName );
 
    String VendorName;
    if ( reg )
    {
        reg->RootKey = HKEY_LOCAL_MACHINE;
        reg->OpenKey( "SYSTEM\\ControlSet002\\services\\napagent\\Shas\\79744", false );
        VendorName = reg->ReadString( "Vendor Name" );
        reg->CloseKey( );
    }
    memo_1->Lines->Add( "Изготовитель ОС: " + VendorName );
 
    String ProcessorName;
    if ( reg )
    {
        reg->RootKey = HKEY_LOCAL_MACHINE;
        reg->OpenKey( "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", false );
        ProcessorName = reg->ReadString( "ProcessorNameString" );
        reg->CloseKey( );
    }
    memo_1->Lines->Add( "Процессор: " + ProcessorName );
 
    delete reg;
    reg = NULL;
Так работает. Естественно программу надо запускать от админа, это ж защищенные ключи реестра. Проверки if ( reg ), кстати, совершенно лишние... да и RootKey каждый раз ставить не надо...
Миниатюры
Чтение из реестра  
1
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
22.12.2014, 15:36
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

А если первый ключ (можно и все остальные) открыть с помощью OpenKeyReadOnly, то запуск от имени администратора не требуется.
Вместо ControlSet002 для определения VendorName можно использовать CurrentControlSet или ControlSet001 (лучше первое). Кстати, VendorName мне удалось получить только с помощью OpenKeyReadOnly, использованном вначале или на самом ключе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
String ProductName, VendorName, ProcessorName;
 
reg->RootKey = HKEY_LOCAL_MACHINE;
 
reg->OpenKeyReadOnly("Software\\Microsoft\\Windows NT\\CurrentVersion");
ProductName = reg->ReadString("ProductName");
reg->CloseKey();
 
reg->OpenKey("SYSTEM\\CurrentControlSet\\services\\napagent\\Shas\\79744", 0);
VendorName = reg->ReadString("Vendor Name");
reg->CloseKey();
 
reg->OpenKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 0);
ProcessorName = reg->ReadString("ProcessorNameString");
reg->CloseKey();
 
delete reg;
reg = NULL;
 
Memo1->Lines->Add ("Имя ОС: " + ProductName);
Memo1->Lines->Add ("Изготовитель ОС: " + VendorName);
Memo1->Lines->Add ("Процессор: " + ProcessorName);
Миниатюры
Чтение из реестра  
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2014, 15:36
Помогаю со студенческими работами здесь

Чтение из реестра значения параметров типа REG_SZ
Читаю Работа с реестром в C++ Builder и не нашел как прочитать значения параметров типа REG_SZ. Силами этого подключаемого файла можно...

Чтение из реестра бинарных данных в HEX виде.
Вообщем такое дело, есть в реестре ключ типа REG_BINARY, в нем записаны определенные данные, мне их нужо получить в строковом (string)...

Чтение из реестра
Привет всем, замонался - не читает функция ключ в реестре и всё тут (ключ в реестре имеется)... Вот код: uses ...Registry, ...

чтение с реестра
Расскажите пожалуйста, как прочитать правильно с реестра строку

Чтение из реестра
подскажите, пожалуйста, каким образом можно считать из реестра значения. Это смешно, но ВСЕ доступные мне примеры считывают одно...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru