void SearchKeys(string rootkey,string searchkey);
HKEY hRootKey;
string way="HARDWARE";
char keyname[128];
DWORD keynamesize = 128;
HKEY hKey = NULL;
int main()
{
const int k_size=64;
char text1[k_size],text2[k_size];
CharToOem("Введите название корневого ключа: ",text1);
CharToOem("Введите название ключа для поиска: ",text2);
string rootKey,searchkey;
cout << text1 << endl;
cin >> rootKey;
cout << text1 << endl;
cin >> searchkey;
SearchKeys(rootKey,searchkey);
return 0;
}
void SearchKeys(string rootKey,string searchKey)
{
if (rootKey == "HKEY_LOCAL_MACHINE" || rootKey == "HKLM")
hRootKey = HKEY_LOCAL_MACHINE;
else if (rootKey == "HKEY_USERS" || rootKey == "HKU")
hRootKey = HKEY_USERS;
else if (rootKey == "HKEY_CURRENT_CONFIG" || rootKey == "HKCC")
hRootKey = HKEY_CURRENT_CONFIG;
else if (rootKey == "HKEY_CLASSES_ROOT" || rootKey == "HKCR")
hRootKey = HKEY_CLASSES_ROOT;
else if (rootKey == "HKEY_CURRENT_USER" || rootKey == "HKCU")
hRootKey = HKEY_CURRENT_USER;
if (way!="NULL")
way+="\\";
LONG err = RegOpenKey(hRootKey, way.c_str(), &hKey);
if (err != ERROR_SUCCESS)
{
cout << err << endl;
}
DWORD keynamesize = 128;
long index = 0;
while (true)
{
err = RegEnumKeyEx(hKey, index, keyname, &keynamesize, 0, NULL, NULL, NULL);
index ++;
if (err != ERROR_NO_MORE_ITEMS)
{
cout << keyname << endl;
if (keyname == searchKey)
break;
way+=keyname;
SearchKeys(rootKey,searchKey);
}
}
if (hKey)
RegCloseKey(hKey);
}
Поиск по реестру
Здравствуйте возникла проблемка с поиском по реестру, надо вывести на экран последовательно имена всех ключей, встретившихся при поиске в реестре ключа с заданным именем.Получается рекурсивно.... воть какие есть наброски, подскажите что не так и как лучше сделать.