0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 22
1

C++ и реестр х64

14.10.2013, 19:55. Показов 803. Ответов 7
Метки нет (Все метки)

Привет всем. Мне по заданию нужно извлечь название и модель процессора
Использую следующий код:
C++
1
2
3
4
5
6
 AnsiString ProcessorName, identifier;
 TRegistry *reg = new TRegistry;
 reg->RootKey = HKEY_LOCAL_MACHINE;
 reg->OpenKey("Hardware\\Description\\System\\CentralProcessor\\0", false);
 ProcessorName=reg->ReadString("ProcessorNameString");
 Edit9->Text=ProcessorName;
проблема заключается в том что, на разных машинах с х64 системой(вин 7) код не всегда работает.
Подскажите пожалуйста какие уточнения использовать для идентификации х64 ОС. Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2013, 19:55
Ответы с готовыми решениями:

Отличие х64 от х32
Решил поставить XE4. Решил посмотреть на С++ х64 компилятор. Сразу бросилось в глаза отсутствие...

реестр
подскажите пожалуйста где в реестре лежит информация про оперативку и про ком порты??

Реестр
Всем привет. Нужна программа, которая выводила бы параметры компа (Какая мама, видюха, проц и т.д.)...

Реестр
Два вопроса, как удалить ветки в реестре, и как удалить определенный файл?(например файл...

7
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
14.10.2013, 20:46 2
WDB124,
C++
1
KEY_WOW64_64KEY
Почитайте, если я вас так понял
1
Ушел с форума
Эксперт С++
16457 / 7421 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
15.10.2013, 09:10 3
Цитата Сообщение от WDB124 Посмотреть сообщение
проблема заключается в том что, на разных машинах с х64 системой(вин 7) код не всегда работает.
Не работает - это что значит ?
Вылетает с ошибкой, выдает пустую строку, кракозябры, форматирует диск С ?

Ddv122, раздел HARDWARE реестра не подвержен WOW-редиректам.
Хотя все равно информация полезная.
1
Почемучка)
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
15.10.2013, 17:30 4
Убежденный,
Логично, сразу и не заметил
Скажу по себе - у меня не разу не было проблем с этим кодом, использую его уже 2 года для определения процессора

C++
1
2
3
4
5
6
7
8
    TRegistry *reg=new TRegistry;
    reg->RootKey=HKEY_LOCAL_MACHINE;  //Как и при записи указываем раздел с которым будем работать
    AnsiString ProcessorName="Unknown";
    reg->OpenKey("Hardware\\Description\\System\\CentralProcessor\\0", false);
    ProcessorName=reg->ReadString("ProcessorNameString");
    Label1->Caption=ProcessorName.Trim();    //выводим значение в label
    reg->CloseKey();  //Закрываем ключ
    delete reg;
Возможно у человека проблемы с UAC
1
Ушел с форума
Эксперт С++
16457 / 7421 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
15.10.2013, 18:19 5
Цитата Сообщение от Ddv122 Посмотреть сообщение
Скажу по себе - у меня не разу не было проблем с этим кодом, использую его уже 2 года для определения процессора
Вообще, наиболее логичный способ определения процессора - "спросить" у него самого.
То бишь с помощью инструкции CPUID. Там уж точно не будет проблем с UAC, с
поиском ключей реестра и т.п. Кстати, UAC не должен мешать, ведь доступ к HKLM на
чтение у всех групп пользователей должен быть по любому.
2
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 22
15.10.2013, 18:36  [ТС] 6
неработоспособность заключалась в том, что возвращало пустое значение.
я решил проблему иначе просто забыл написать:
C++
1
2
3
4
5
6
7
8
 TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
 reg->RootKey = HKEY_LOCAL_MACHINE;
 reg->OpenKeyReadOnly("Hardware\\Description\\System\\CentralProcessor\\0");
 ProcessorName=reg->ReadString("ProcessorNameString");
 Edit9->Text=ProcessorName;
 identifier=AnsiString(reg->ReadString("Identifier"));
 Edit11->Text=identifier;
 delete reg;
Всем спасибо...
0
Ушел с форума
Эксперт С++
16457 / 7421 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
15.10.2013, 18:44 7
Цитата Сообщение от WDB124 Посмотреть сообщение
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
KEY_ALL_ACCESS - а вот теперь и начнутся те самые проблемы с UAC, о которых писал Dvd122.
Для чтения реестра достаточно KEY_READ.

Хотя, возможно, я и ошибаюсь (плохо знаю Builder и специфику TRegistry).
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32485 / 20971 / 8114
Регистрация: 22.10.2011
Сообщений: 36,240
Записей в блоге: 7
15.10.2013, 19:29 8
Цитата Сообщение от Убежденный Посмотреть сообщение
Для чтения реестра достаточно KEY_READ
Абсолютно достаточно, к тому же

Цитата Сообщение от WDB124 Посмотреть сообщение
TRegistry *reg = new TRegistry;
- это тоже лишнее, потому что без указания уровня доступа TRegistry создается всегда с уровнем KEY_ALL_ACCESS. Нужно указывать KEY_READ при создании экземпляра объекта...
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2013, 19:29
Помогаю со студенческими работами здесь

Реестр
Здравствуйте! Подскажите пожалуйста, как с помощью builder c++ осуществить экспорт всего реестра в...

Реестр
Здравствуйте. Подскажите, как вывести в поле Memo, все параметры ключа, к примеру...

Реестр на с++builder
Как создать,удалить раздел,ключ в реестре по нажатию соответствующей кнопки в MainMenu ?? ...

Реестр и UAC
Произвожу чтение с рееста TRegistry *reg = new TRegistry(); //TRegistry(KEY_ALL_ACCESS)...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru