Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск по реестру

42K
09 ноября 2008 года
McClain
3 / / 25.10.2008
Здравствуйте возникла проблемка с поиском по реестру, надо вывести на экран последовательно имена всех ключей, встретившихся при поиске в реестре ключа с заданным именем.Получается рекурсивно.... воть какие есть наброски, подскажите что не так и как лучше сделать.
Код:
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);
}

Долна работать обратная рекурсия, а как это сделать не представляю ...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог