Форум программистов, компьютерный форум CyberForum.ru

Ошибка чтения параметра из реестра - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
07.10.2011, 18:34     Ошибка чтения параметра из реестра #1
Добрый вечер. Пишу программу, которая использует реестр. Суть программы: на форме есть кнопка, которая при нажатие регистрирует необходимые параметры в реестре. Есть вторая кнопка, которая читает эти параметры и в дальнейшем их использует по назначению. Вот кусок кода, который отвечает за запись параметров:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
HKEY hKey1;
char rfilelm[1024] = {0};// две строки, которые нужно записать
char rfilecu[1024] = {0};
 
//производим действия со строками
 
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
        "SOFTWARE\\Microsoft\\KontrolRun",
        0, KEY_ALL_ACCESS, &hKey2) == ERROR_SUCCESS)
{   
        // далее пишем эти строки   
    RegSetValueEx(hKey2, "rfilelm", NULL, REG_SZ, rfilelm, sizeof(rfilelm));
    RegSetValueEx(hKey2, "rfilecu", NULL, REG_SZ, rfilecu, sizeof(rfilecu));
}
else
{
        MessageBox(NULL, "Невозможно открыть ключ!", "Открытие", MB_OK | MB_ICONERROR);
    return;
}
RegCloseKey(hKey1);
К этому куску кода вопросов не имею, все пишется, сам проверял, они существуют
Далее, у нас есть второй кусок, который читает эти параметры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
HKEY hKey;
char rlm[1024] = {0};   DWORD trlm = sizeof(rlm);
char rcu[1024] = {0};   DWORD trcu = sizeof(rcu);
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
        "SOFTWARE\\Microsoft\\KontrolRun",
        0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
{
    if(RegQueryValueEx(hKey, "rfilelm",
        NULL, NULL, (LPBYTE)rlm, &trlm) == ERROR_SUCCESS)
    {
        ShowMessage(rlm);
    }
    else
    {
        ShowMessage("HKLM. Не прочитать!");
    }
 
    if(RegQueryValueEx(hKey, "rfilecu",
            NULL, NULL, (LPBYTE)rcu, &trcu) == ERROR_SUCCESS)
    {
        ShowMessage(rcu);
    }
    else
    {
        ShowMessage("HKCU. Не прочитать!");
    }
}
else
{
    MessageBox(NULL, "Невозможно открыть ключ!", "Открытие", MB_OK | MB_ICONERROR);
    return;
}
RegCloseKey(hKey);
Вот тут начинаются фокусы Параметр rlm спокойно читается и, разумеется, спокойно выводиться в ShowMessage, а параметр rcu ни в какую не хочет читаться Повторюсь, я его сам лично проверял, он есть
Да и еще, тут заметил, если открыть этот ключ в редакторе реестра и нажать два раз по этому параметру (т. е. открыть окно где можно изменять значение данного параметра), и просто нажать ОК, не изменяя значение параметра, то в программе все отлично читается, без всяких ошибок.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
07.10.2011, 19:42     Ошибка чтения параметра из реестра #2
Цитата Сообщение от Игорь98 Посмотреть сообщение
SOFTWARE\\Microsoft\\KontrolRun
- а этот ключ валидный???
Не SOFTWARE\\Microsoft\\ControlRun ли???
Ну раз уж сюда заходит

Цитата Сообщение от Игорь98 Посмотреть сообщение
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
* * * * * * * * "SOFTWARE\\Microsoft\\KontrolRun",
* * * * * * * * 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
тогда предлагаю попробовать
if(RegQueryValueEx(hKey, "\\rfilecu",...
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
07.10.2011, 19:57  [ТС]     Ошибка чтения параметра из реестра #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Не SOFTWARE\\Microsoft\\ControlRun ли???
Нет я не ошибся, у меня программа KontrolRun называется, вот я для нее и создал отдельный раздел в реестре!
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
тогда предлагаю попробовать
if(RegQueryValueEx(hKey, "\\rfilecu",...
Попробовал данный вариант, не помогает, точно так же не выводит значение...
-=ЮрА=-
Заблокирован
Автор FAQ
07.10.2011, 20:08     Ошибка чтения параметра из реестра #4
Стоп RegQueryValueEx зачем её???Давайте так попробуем
C++
1
RegSetValueEx(hKey,"rfilecu",0,REG_SZ,(LPBYTE)rcu,strlen(rcu));
Добавлено через 1 минуту
+ мне не понятно где мы
Цитата Сообщение от Игорь98 Посмотреть сообщение
rcu
инициализировали???

Добавлено через 1 минуту
Ниже код прописи в автозагрузку
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Registry(void) // вписываем в автозапуск
{
    HKEY hKey = HKEY_LOCAL_MACHINE; 
    LPCTSTR lpSubKey ="Software\\Microsoft\\Windows\\CurrentVersion\\Run"; 
    DWORD dwType = REG_SZ;
    HKEY key;
    RegOpenKeyEx(hKey,lpSubKey,0,KEY_WRITE,&key);
    char pfad[MAX_PATH];
    GetModuleFileName(NULL,pfad,MAX_PATH);
    RegSetValueEx(key,"KeySpy",0,REG_SZ,(LPBYTE)pfad,strlen(pfad));
    //WH_GETMESSAGE
}
- код 100% рабочий!
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
07.10.2011, 20:24  [ТС]     Ошибка чтения параметра из реестра #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ниже код прописи в автозагрузку
Вроде как, с записью в реестра у меня проблем нет, а вот с чтение определенного параметра у меня и не получается.
-=ЮрА=-
Заблокирован
Автор FAQ
07.10.2011, 20:48     Ошибка чтения параметра из реестра #6

Не по теме:

Цитата Сообщение от Игорь98 Посмотреть сообщение
Вроде как, с записью в реестра у меня проблем нет, а вот с чтение определенного параметра у меня и не получается.
- прошу прощения я не въехал в топик, сейчас персмотрю алгоритм, простите...!



Добавлено через 10 минут
Игорь98, попробуйте
C++
1
2
3
4
5
6
7
8
9
10
11
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                "SOFTWARE\\Microsoft\\KontrolRun",
                0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
{
    DWORD dwIndex = 0;
    while(ERROR_NO_MORE_ITEMS (lResCode = RegEnumValue(hKey,dwIndex,NULL,NULL,NULL,NULL,NULL,(LPBYTE)rlm, &trlm)))
    {
        ShowMessage(rlm);
        dwIndex++;
    }
}

Не по теме:

PS:С реестром давненько работал так что приходится вспоминать по топику

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2011, 09:11     Ошибка чтения параметра из реестра
Еще ссылки по теме:

Ошибка записи и чтения объектов C++
Ошибка чтения из файла C++
Ошибка чтения первых и последних 5 строк массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.10.2011, 09:11     Ошибка чтения параметра из реестра #7
у тебя там разные ключи в первом коде
Yandex
Объявления
08.10.2011, 09:11     Ошибка чтения параметра из реестра
Ответ Создать тему
Опции темы

Текущее время: 19:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru