584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
1

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

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

Author24 — интернет-сервис помощи студентам
Есть определенный путь например 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2015, 13:28
Ответы с готовыми решениями:

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

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

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

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

3
43 / 43 / 21
Регистрация: 24.08.2015
Сообщений: 136
22.09.2015, 14:00 2
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
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
22.09.2015, 14:13  [ТС] 3
заменил на ваш код
определил
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 4
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
22.09.2015, 14:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2015, 14:29
Помогаю со студенческими работами здесь

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

Не считывает параметр с реестра
Добрый день. Есть код: ...

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

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

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

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


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

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

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