Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
1

Не считывает параметр с реестра

05.05.2014, 16:17. Показов 786. Ответов 3
Метки нет (Все метки)

Добрый день.
Есть код:
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
34
35
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <winbase.h>
#include "Registry.hpp"
 
 
#include "Unit1.h"
#include <Iptypes.h>
#include <assert.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TRegistry *reg=new TRegistry();
reg->RootKey=HKEY_LOCAL_MACHINE;
reg->OpenKeyReadOnly("SOFTWARE\\Microsoft\\Cryptography");
AnsiString WinID;
WinID=reg->ReadString("MachineGuid");
reg->CloseKey();
delete reg;
Edit1->Text = WinID;
}
Этот код почему-то не работает. Хотя точно такой-же код работает нормально :
C++
1
2
3
4
5
6
7
8
TRegistry *reg=new TRegistry(); 
reg->RootKey=HKEY_LOCAL_MACHINE;  
reg->OpenKeyReadOnly("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
AnsiString WindowsVersion;
WindowsVersion=reg->ReadString("ProductName");
reg->CloseKey();
delete reg;
Edit1->Text = WindowsVersion;
Подскажите,в чём проблема.
Заранее спасибо.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2014, 16:17
Ответы с готовыми решениями:

Не считывает ключ реестра в Windows XP (не запускается программа)
Имеется следующий метод: public static string ReadRegistry(string registryPath, string key) {...

Запрос к серверу не считывает параметр из формы
:) Доброго время суток! Пожалуйста, подскажите как создать запрос к серверу (из Access) c...

Изменить параметр ветки реестра
вот ветка HKEY_LOCAL_MACHINE\SOFTWARE\Microso ft\Windows NT\CurrentVersion\Winlogon параметр...

Не могу удалить параметр из реестра
using (RegistryKey key1 =...

3
return (true);
1974 / 1109 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
05.05.2014, 16:37 2
Потому что если windows 64-разрядный, то результат вы получаете из ветки wow64, в которой этого значения может и не существовать.
В качестве пруфа поищите в HKLM\\Software каталог Wow6432Node, внутри уже \microsoft\... что там вам надо и посмотрите есть ли такой ключ. Если нет, создайте ручками и посмотрите результат =)
1
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
05.05.2014, 18:06  [ТС] 3
Цитата Сообщение от mimicria Посмотреть сообщение
Потому что если windows 64-разрядный, то результат вы получаете из ветки wow64, в которой этого значения может и не существовать.
В качестве пруфа поищите в HKLM\\Software каталог Wow6432Node, внутри уже \microsoft\... что там вам надо и посмотрите есть ли такой ключ. Если нет, создайте ручками и посмотрите результат =)
Спасибо большое. Буду разбираться.
0
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
06.05.2014, 04:15 4
можно еще так сделать:
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
34
35
36
37
38
39
40
41
42
43
44
HKEY Key,SubKey;
        long  ErrorCode;
        DWORD KeyCount = 0;
        CHAR Value[MAX_PATH];
        TCHAR buf[MAX_PATH];
        DWORD bufSize = MAX_PATH;
        DWORD keyType = REG_SZ;
        String StartHere = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
 
        if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, StartHere.w_str(), NULL, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &Key) == ERROR_SUCCESS)
        {
            do
            {
                ErrorCode = RegEnumKey(Key, KeyCount, (LPTSTR)Value, MAX_PATH);
                if(ErrorCode == ERROR_SUCCESS)
                {
 
                    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, (StartHere + "\\" + (LPTSTR)Value).w_str(), NULL, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &SubKey) == ERROR_SUCCESS)
                    {
                        if (String((LPTSTR)Value).Pos("{") == 1)
                        {
                            lstrcat(buf,L"");
                            RegQueryValueEx(SubKey, L"DisplayName", NULL, &keyType, NULL, &bufSize);
                            if (RegQueryValueEx(SubKey, L"DisplayName", NULL, &keyType, (LPBYTE)buf, &bufSize) == ERROR_SUCCESS)
                            {
                                if(String(buf) != "" && String(buf).Pos("kb") != 1)
                                {
                                    DisplayNameList->Add(buf);
 
                                    KeyList->Add((LPTSTR)Value);
                                }
                            }
                            RegCloseKey(SubKey);
                        }
                    }
 
                }
 
                KeyCount++;
            }
            while(ErrorCode != ERROR_NO_MORE_ITEMS);
            RegCloseKey(Key);
 
        }
DisplayNameList и KeyList - TStringList.
Свою ветку реестра подставьте. должно получится
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2014, 04:15

Считать с реестра пары параметр-значение
Есть определенный путь например HKEY_CLASSES_ROOT\Installer\Products, как считать все пары...

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

Как удалить из реестра строковый параметр
Здравствуйте Ув. Пользователи и профессионалы. Появился вопрос, а как удалить из реестра ...

За что отвечвет параметр реестра AppInit_DLLs
А что это за параметр такой можно поинтересоваться?

Добавить символ переноса строки в параметр реестра
Приветствую. Для быстрого создание *.BAT файлов использую вот такой твик реестра Windows...

Как обозвать в c# строковый параметр из реестра (По умолчанию)?
Добрый день. Как записан этот параметр в c# ? Есть некий код: public static string...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.