Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > WinAPI
Перезагрузить страницу Как перебрать подключи, параметры и значения реестра?
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
tumanovalex tumanovalex вне форума
Member
 
Сообщений: 304
Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
Регистрация: 26.03.2004
Адрес: Москва
Question Как перебрать подключи, параметры и значения реестра? - 14.03.2015, 00:01

Windows 7, Visual Studio 2013 Express. Нужно определить имена и значения ключей и подключей. За основу взял код программы из книги Харта "Системное программирование в среде Windows" (3 издание). Код программы:
Цитата:
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;
int ErrorMes(string mes)
{
cout << mes << endl;
cin.get();
exit(EXIT_FAILURE);
}
bool FindBlock(HKEY hKey, LPTSTR FullKeyName, LPTSTR SubKey)
{
HKEY hSubKey;
DWORD ValueType, Index;
DWORD NumSubKeys, MaxSubKeyLen, NumValues, MaxValueNameLen, MaxValueLen;
DWORD SubKeyNameLen, ValueNameLen, ValueLen;
LPTSTR SubKeyName, ValueName;
LPBYTE Value;
LONG Result;
TCHAR FullSubKeyName [MAX_PATH+1];
setlocale(LC_ALL, "Russian");
if (RegOpenKeyEx(hKey, SubKey, 0, KEY_READ, &hSubKey) != ERROR_SUCCESS)
{
ErrorMes("Не удалось открыть ключ реестра!");
}
if (RegQueryInfoKey(hSubKey, NULL, NULL, NULL, &NumSubKeys, &MaxSubKeyLen, NULL, &NumValues, &MaxValueNameLen,
&MaxValueLen, NULL, NULL) != ERROR_SUCCESS)
{
ErrorMes("Не удалось получить информацию о ключе реестра!");
}
SubKeyName = (LPTSTR) malloc(MaxSubKeyLen + 1);
ValueName = (LPTSTR) malloc(MaxValueNameLen + 1);
Value = (LPBYTE) malloc(MaxValueLen);
if(SubKeyName == NULL || ValueName == NULL || Value == NULL)
{
ErrorMes("Не удалось выделить память для параметров реестра!");
}
for (Index = 0; Index < NumValues; Index++)
{
ValueNameLen = MaxValueNameLen + 1;
ValueLen = MaxValueLen + 1;
Result = RegEnumValue(hSubKey, Index, ValueName, &ValueNameLen, NULL,
&ValueType, Value, &ValueLen);
if (Result == ERROR_SUCCESS && GetLastError() == 0)
{
cout << ValueName << endl << ValueType << endl << Value << endl << ValueLen << endl;
}
else
{
ErrorMes("Не удалось считать параметры1");
}
}
//for (Index = 0; Index < NumSubKeys; Index++)
//{
// SubKeyNameLen = MaxSubKeyLen + 1;
// Result = RegEnumValue (hSubKey, Index, ValueName, &ValueNameLen, NULL,
// &ValueType, Value, &ValueLen);
// if (GetLastError() == 0)
// {
// cout << FullSubKeyName << "\t\t" << FullKeyName << SubKeyName << endl;
// FindBlock (hSubKey, FullSubKeyName, SubKeyName);
// }
//}
//free(SubKeyName);
//free(ValueName);
//free(Value);
RegCloseKey(hSubKey);
cout << "Программа завершена успешно!" << endl;
cin.get();
return(EXIT_SUCCESS);
}
int main()
{
FindBlock(HKEY_LOCAL_MACHINE, NULL, (LPTSTR) TEXT("SYSTEM\\CurrentControlSet\\Enum\\USBSTOR\\") );
return 0;
}
В программе используется параметр FullKeyName (FullSubKeyName), который, видимо, нужно формировать при каждом новом проходе и рекурсивном вызове функции FindBlock. Мне нужно перебрать только подключи и параметры ниже подключа HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enu m\\USBSTOR\\
Подскажите, пожалуйста, как правильно вывести подключи, параметры и их значения определенного подключа в прогрмме. Проект прилагаю.
Вложения
Тип файла: zip TestRegistryCppVS2008.zip (2.8 Кб, 4 просмотров)
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как перебрать документы в алфавитном порядке? vikki Visual Basic 1 03.10.2012 20:24
чистильщик реестра Dmitriy777777 Любые вопросы от новичков 15 26.06.2012 23:57
Отслеживание реестра Дядя Саша Софт и программы 10 27.04.2012 16:46
Восстановление реестра Win 7 024625 Любые вопросы от новичков 1 23.11.2011 02:40
Как правильно перебрать точки Sly7 С/С++ 0 22.12.2010 21:35
Перебрать все варианты расположения шариков mARICa Prolog 7 11.11.2008 13:27
Знатокам реестра!!! valdon Софт и программы 3 14.04.2008 00:55
Очистка реестра Shturmovik Мысли вслух 41 17.08.2007 19:22
Как в цикле перебрать все объекты на форме DiCtator C++ Builder 2 20.09.2006 21:48
Как стартануть Dll из реестра MontyBurns Visual C++ 5 07.03.2006 21:25
Автозагрузка и ключ реестра lord Visual C++ 5 19.11.2005 10:19
Как с помощью Delphi поменять DWORD значения реестра Anonymous Delphi 1 25.01.2004 05:26



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов