Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RegEnumKey, непонятно 
:(
    Опции темы
sdjhsjhd
Дата 7.12.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 19.11.2008

Репутация: нет
Всего: нет



Программа, считывает параметр DisplayName из реестра у каждого раздела в папке
HKEY_LOCAL_MACHINE SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\
и добавляет их в список
Код

    HKEY key,subkey;
    wchar_t* value = new wchar_t[255];
    wchar_t* folder = new wchar_t[255];
    const wchar_t* foldername = new wchar_t[255];
    DWORD dwordsize = 255;
    CString string,folders,foldernames;

Код

    RegOpenKey(HKEY_LOCAL_MACHINE,
    L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",&key);
    int i;
    for (i=0;RegEnumKey(key,i,folder,dwordsize)!=ERROR_NO_MORE_ITEMS;++i)
    {
    if(RegEnumKey(key,i,folder,dwordsize)==ERROR_SUCCESS)
    {
    folders=folder;
    foldernames = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"+folders;
    foldername = foldernames.GetString();
    RegOpenKey(HKEY_LOCAL_MACHINE,foldername,&subkey)
    if(RegQueryValueEx(subkey, L"DisplayName",0,NULL,LPBYTE(value),&dwordsize)==ERROR_SUCCESS)
    {
    string = value;
    List.AddString(string);
    }
    RegCloseKey(subkey);
    }
    }
    RegCloseKey(key);


Впринципе все раюотает, но есть одно НО:
RegEnumKey пропускает некоторые(большую часть)папок, т.е. не возвращает ERROR_SUCCESS.
но это только в цикле! а если сделать без цикла(вручную, подставить числа допустим он не видит второй раздел(1) раздел в SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\, а если вручную написать

Код

RegEnumKey(key,1,folder/*название раздела*/,dwordsize)


то без проблем возвращает название (folder)

Подскажите?

Это сообщение отредактировал(а) sdjhsjhd - 7.12.2008, 11:00
PM MAIL   Вверх
Rififi
Дата 7.12.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 2
Всего: 36



сделай так, чтобы вызов RegEnumKey был только 1 раз на каждой итерации цикла.
PM MAIL   Вверх
sdjhsjhd
Дата 7.12.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 19.11.2008

Репутация: нет
Всего: нет



Сделал, и dwordsize переменную заменил на 255(просто число), стало намного лучше, но глюки остались. на этот раз (выесненнго опытным путем)) через брейкпоинт) глюки в 
Код

if(RegQueryValueEx(subkey, L"DisplayName",0,NULL,LPBYTE(value),&dwordsize)==ERROR_SUCCESS)
    {
    string = value;
    List.AddString(string);
    }

тоесть до этого со значениями все нормально, а она уже некоторые(неслколько всего) выдает неправильные.
т.е. в regedit значение DisplayName одно, а RegQueryValueEx выдает другое(значение предидущего каталога).

В чем ошибка?
PM MAIL   Вверх
Rififi
Дата 7.12.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 2
Всего: 36



Цитата(sdjhsjhd @  7.12.2008,  14:35 Найти цитируемый пост)
В чем ошибка? 

не читаешь документацию как вызывать функцию RegQueryValueEx правильно.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.