Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2015, 09:10   #1
TTr5
 
Регистрация: 09.09.2014
Сообщений: 4
По умолчанию Работа с реестром на с++

Здравствуйте,помогите пожалуйста. Мне нужно пройтись по веткам реестра и прочитать значение параметра в каждой ветке. Имя ветки я получаю функцией RegEnumKeyEx, параметр RegQueryValueEx, но в моём коде функция RegQueryValueEx возвращает значение кодом 2 -не удаётся найти указанный раздел. Почему она его не находит ?
Код:
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>

 
int _tmain(int argc, _TCHAR* argv[])
{
    HKEY rKey;
    HKEY rKey2;
    _TCHAR    Reget[255]={'\0'};
    TCHAR     achKey[MAX_PATH];
    DWORD   i, retCode, maxlen = MAX_PATH;
    DWORD RegetPath=sizeof (Reget);
    LONG res;
    LONG res2;
    FILETIME ftLastWriteTime;
    if ((res = RegOpenKeyExW(HKEY_LOCAL_MACHINE,L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",NULL,KEY_ENUMERATE_SUB_KEYS  | KEY_WOW64_64KEY | KEY_READ, &rKey))==ERROR_SUCCESS)
    {
        for (i = 0, retCode = ERROR_SUCCESS; retCode == ERROR_SUCCESS; 
                                                                                               i++)
             {
                 retCode = RegEnumKeyEx(rKey, i,achKey, &maxlen, NULL, NULL, 
                                                                     NULL, &ftLastWriteTime);
                    maxlen = MAX_PATH; 
                    if (retCode == ERROR_SUCCESS)
                    {
                        if ((res2 = RegQueryValueEx(rKey,L"Publisher", NULL,0,(LPBYTE)Reget,&RegetPath))==ERROR_SUCCESS)
                        {
                                                     wprintf(L"%s\n",Reget);
                        }
                        else {printf("res2 = %d\n",res2);}
                    }
                    else
                     printf("retCode = %d\n",retCode);
             }
        RegCloseKey(rKey);
    }
    else{wprintf(L"res =  %d\n",res);}
    getchar();
    return 0;
}

Последний раз редактировалось Stilet; 01.05.2015 в 09:20.
TTr5 вне форума Ответить с цитированием
Старый 01.05.2015, 09:29   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А зачем вообще RegEnumKeyEx если потом всегда читаете ключ "Publisher"?
Ну прочитали вы имя ветки - где вы ее открываете?

Последний раз редактировалось waleri; 01.05.2015 в 09:31.
waleri вне форума Ответить с цитированием
Старый 01.05.2015, 11:05   #3
TTr5
 
Регистрация: 09.09.2014
Сообщений: 4
По умолчанию

В общем сдел так и всё получилось.
if((RegOpenKeyExW(rKey,achKey,NULL, KEY_WOW64_64KEY | KEY_QUERY_VALUE, &rKey2))==ERROR_SUCCESS)
{
if ((res2 = RegQueryValueEx(rKey2,L"Publisher", NULL,0,
LPBYTE)Reget,&RegetPath))==ERROR_SU CCESS)
{
wprintf(L"Reget = %s\n",Reget);
}
else {printf("res2 = %d\n",res2);}
}
else {printf("RegOpenKeyExW error");}

Я думал, что RegEnumKeyEx возвращает ключ rKey+achKey.
TTr5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с реестром rinat56 Visual C++ 1 05.05.2013 19:23
Работа с реестром. dixonich Помощь студентам 4 20.10.2010 23:59
работа с реестром alex0097 Общие вопросы Delphi 1 13.07.2010 10:20
работа с реестром. kozei Win Api 6 17.07.2007 13:31