Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для egor2116
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169

Считать с реестра пары параметр-значение

22.09.2015, 13:28. Показов 851. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть определенный путь например HKEY_CLASSES_ROOT\Installer\Products, как считать все пары параметр-значение со всех ключей которые находятся по этому пути.
Нашел на msdn код который получает все ключи по данному пути, а как теперь прочитать все пары параметр-значение
этих ключей не знаю, помогите кто знает winAPI.

Код который получает все ключи по данному пути
Кликните здесь для просмотра всего текста
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// QueryKey - Enumerates the subkeys of key and its associated values.
//     hKey - Key whose subkeys and values are to be enumerated.
 
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
 
#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383
 
void QueryKey(HKEY hKey) 
{ 
    TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
    DWORD    cbName;                   // size of name string 
    TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
    DWORD    cchClassName = MAX_PATH;  // size of class string 
    DWORD    cSubKeys=0;               // number of subkeys 
    DWORD    cbMaxSubKey;              // longest subkey size 
    DWORD    cchMaxClass;              // longest class string 
    DWORD    cValues;              // number of values for key 
    DWORD    cchMaxValue;          // longest value name 
    DWORD    cbMaxValueData;       // longest value data 
    DWORD    cbSecurityDescriptor; // size of security descriptor 
    FILETIME ftLastWriteTime;      // last write time 
 
    DWORD i, retCode; 
        
    TCHAR  achValue[MAX_VALUE_NAME]; 
    DWORD cchValue = MAX_VALUE_NAME; 
 
    // Get the class name and the value count. 
    retCode = RegQueryInfoKey(
        hKey,                    // key handle 
        achClass,                // buffer for class name 
        &cchClassName,           // size of class string 
        NULL,                    // reserved 
        &cSubKeys,               // number of subkeys 
        &cbMaxSubKey,            // longest subkey size 
        &cchMaxClass,            // longest class string 
        &cValues,                // number of values for this key 
        &cchMaxValue,            // longest value name 
        &cbMaxValueData,         // longest value data 
        &cbSecurityDescriptor,   // security descriptor 
        &ftLastWriteTime);       // last write time 
 
    // Enumerate the subkeys, until RegEnumKeyEx fails.
    
    if (cSubKeys)
    {
        printf( "\nNumber of subkeys: %d\n", cSubKeys);
 
        for (i=0; i<cSubKeys; i++) 
        { 
            cbName = MAX_KEY_LENGTH;
            retCode = RegEnumKeyEx(hKey, i,
                     achKey, 
                     &cbName, 
                     NULL, 
                     NULL, 
                     NULL, 
                     &ftLastWriteTime); 
            if (retCode == ERROR_SUCCESS) 
            {
                _tprintf(TEXT("(%d) %s\n"), i+1, achKey);
            }
        }
    } 
 
    // Enumerate the key values. 
 
    if (cValues) 
    {
        printf( "\nNumber of values: %d\n", cValues);
 
        for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 
        { 
            cchValue = MAX_VALUE_NAME; 
            achValue[0] = '\0'; 
            retCode = RegEnumValue(hKey, i, 
                achValue, 
                &cchValue, 
                NULL, 
                NULL,
                NULL,
                NULL);
 
            if (retCode == ERROR_SUCCESS ) 
            { 
                _tprintf(TEXT("(%d) %s\n"), i+1, achValue); 
            } 
        }
    }
}
 
int  main()
{
   HKEY hTestKey;
 
   if( RegOpenKeyEx( HKEY_CLASSES_ROOT,
        TEXT("Installer\\Products"),
        0,
        KEY_READ,
        &hTestKey) == ERROR_SUCCESS
      )
   {
      QueryKey(hTestKey);
   }
 
   RegCloseKey(hTestKey);
   return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2015, 13:28
Ответы с готовыми решениями:

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

Считать значение реестра из локальной сети
то есть из компьютера подключенного по локальной сети. как то возможно? в частности в C#?

Как считать из реестра значение параметра, который имеет тип REG_EXPAND_SZ?
Друзья! Тип REG_EXPAND_SZ в реестре это очень хитрый тип,называется &quot;Расширяемый строковый параметр&quot;. То есть он может быть строкой и...

3
43 / 43 / 21
Регистрация: 24.08.2015
Сообщений: 136
22.09.2015, 14:00
egor2116, тут просто надо заменить
C++
1
2
3
4
5
6
7
retCode = RegEnumValue(hKey, i, 
                achValue, 
                &cchValue, 
                NULL, 
                NULL,
                NULL,
                NULL);
на
C++
1
2
3
4
5
6
7
8
9
LPBYTE  achData[MAX_DATA]; 
DWORD cchData = MAX_DATA;
retCode = RegEnumValue(hKey, i, 
                achValue, 
                &cchValue, 
                NULL, 
                NULL,
                achData,
                &cchData );
MAX_DATA определяет размер массива для данных, в achData будет значение ключа
0
 Аватар для egor2116
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
22.09.2015, 14:13  [ТС]
заменил на ваш код
определил
C
1
#define MAX_DATA 255
ругается на
C
1
2
3
4
5
6
7
8
9
10
11
LPBYTE  achData[MAX_DATA]; 
DWORD cchData = MAX_DATA;
retCode = RegEnumValue(hKey, i, 
                achValue, 
                &cchValue, 
                NULL, 
                NULL,
                achData,
                &cchData ); /// тут пишет cannot convert 'BYTE** {aka unsigned char**}' to 'LPBYTE {aka unsigned 
                                 ///char*}' for argument '7' to 'LONG 
                                //RegEnumValueA(HKEY, DWORD, LPSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD)'
0
43 / 43 / 21
Регистрация: 24.08.2015
Сообщений: 136
22.09.2015, 14:29
egor2116, Вот так правильно
C++
1
2
3
4
5
6
7
8
9
byte achData[MAX_DATA]; 
DWORD cchData = MAX_DATA;
retCode = RegEnumValue(hKey, i, 
                achValue, 
                &cchValue, 
                NULL, 
                NULL,
                (LPBYTE)&achData,
                &cchData );
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2015, 14:29
Помогаю со студенческими работами здесь

Как считать и присвоить значение реестра полю Edit.Text на форме приложения.
Не могу дать ума. Проблема в следующем. Приложение (форма с полем Edit1.Text). Нужно сделать так, чтобы на этапе процедуры FormCreate...

Как записать значение в параметр реестра с именем "(По умолчанию)", который создан по дефолту в каждом разделе?
как записать значение в параметр реестра с именем &quot;(По умолчанию)&quot;, который создан по дефолту в каждом разделе. т.е записать именно в...

Не считывает параметр с реестра
Добрый день. Есть код: //--------------------------------------------------------------------------- #include &lt;vcl.h&gt; ...

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru