Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для _newbie_coder
6 / 6 / 0
Регистрация: 09.03.2017
Сообщений: 140

Не читаются ключи из реестра. Очень много чего перепробовал

22.03.2017, 19:26. Показов 2813. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Никак не могу прочесть любой ключ из реестра.
Пробовал по всякому.
сборка 32бита. Система Win7-64
Учетка - пользовательская.Права у сборки -админские.
Права у IDE Code::Blocks - админские.
это всё не считыват ключи:

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
#ifndef KEY_WOW64_64KEY
#define KEY_WOW64_64KEY 0x0100
#endif
#ifndef KEY_WOW64_32KEY
#define KEY_WOW64_32KEY 0x0200
#endif
 
 
HKEY keyHandle;
char rgValue [1024];
char fnlRes [1024];
DWORD size1;
DWORD Type;
 
if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                 "\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion",0,
            KEY_QUERY_VALUE|KEY_WOW64_64KEY, &keyHandle) == ERROR_SUCCESS)
             {
                size1=1023;
                RegQueryValueEx( keyHandle, "ProductName", NULL, &Type,
                    (LPBYTE)rgValue,&size1);
                cout<<fnlRes<<endl;
             }
        else cout<<"Нет доступа"<<endl;
 
 
            cout <<fnlRes;
 RegCloseKey(keyHandle);
еще куча вариантов не сработала
Кликните здесь для просмотра всего текста

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                 "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion",0,
            KEY_QUERY_VALUE|KEY_WOW64_64KEY, &keyHandle) == ERROR_SUCCESS)
             {
                size1=1023;
                RegQueryValueEx( keyHandle, "CommonFilesDir", NULL, &Type,
                    (LPBYTE)rgValue,&size1);
                cout<<fnlRes<<endl;
             }
       cout<<"Нет доступа"<<endl;
 
 
            cout <<fnlRes;
 RegCloseKey(keyHandle);
 
 if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                 "\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion",0,
            KEY_QUERY_VALUE|KEY_WOW64_32KEY, &keyHandle) == ERROR_SUCCESS)
             {
                size1=1023;
                RegQueryValueEx( keyHandle, "ProductName", NULL, &Type,
                    (LPBYTE)rgValue,&size1);
                cout<<fnlRes<<endl;
             }
        else cout<<"Нет доступа"<<endl;
 
 
            cout <<fnlRes;
 RegCloseKey(keyHandle);
 
 if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                 "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion",0,
            KEY_QUERY_VALUE|KEY_WOW64_32KEY, &keyHandle) == ERROR_SUCCESS)
             {
                size1=1023;
                RegQueryValueEx( keyHandle, "CommonFilesDir", NULL, &Type,
                    (LPBYTE)rgValue,&size1);
                cout<<fnlRes<<endl;
             }
       cout<<"Нет доступа"<<endl;
 if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                 "\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion",0,
            KEY_READ|KEY_WOW64_32KEY, &keyHandle) == ERROR_SUCCESS)
             {
                size1=1023;
                RegQueryValueEx( keyHandle, "ProductName", NULL, &Type,
                    (LPBYTE)rgValue,&size1);
                cout<<fnlRes<<endl;
             }
        else cout<<"Нет доступа"<<endl;
 
 
            cout <<fnlRes;
 RegCloseKey(keyHandle);
 
 if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                 "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion",0,
            KEY_READ|KEY_WOW64_32KEY, &keyHandle) == ERROR_SUCCESS)
             {
                size1=1023;
                RegQueryValueEx( keyHandle, "CommonFilesDir", NULL, &Type,
                    (LPBYTE)rgValue,&size1);
                cout<<fnlRes<<endl;
             }
       cout<<"Нет доступа"<<endl;
 
 
 
            cout <<fnlRes;
 RegCloseKey(keyHandle);




Добавлено через 4 часа 48 минут
Убрал слеши в начале строки и теперь не пишет "нет доступа".
Значит функция возвращает теперь ERROR_SUCCESS. Таки работает.
Но выводит хрень: "Д" - один символ.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  HKEY keyHandle;
    LPCTSTR rgValue = new char  [1024];
    LPCTSTR fnlRes = new char [1024];
    DWORD size1;
    DWORD Type;
 
 
 
    if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
    TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),0,
    KEY_QUERY_VALUE | KEY_WOW64_64KEY, &keyHandle) == ERROR_SUCCESS)
    {
        size1=1023;
        RegQueryValueEx( keyHandle, TEXT("CommonFilesDir"), NULL, &Type,
        (LPBYTE)rgValue,&size1);
        cout<<fnlRes<<endl;
    }
    else cout<<"Нет доступа"<<endl;
 
    cout <<fnlRes;
    RegCloseKey(keyHandle);
Добавлено через 9 минут
Победа!!!!
Теперь работает!
1)Ошибка была в "" в начале строки. Это не нужно
2)Необходимо пользоваться KEY_WOW64_64KEY, насколько я понял. Для разрядных приложений в 64-битной системе.
3)Выводить нужно было rgValue,а не другой параметр.
4)Ну еще я перевел код на использование типов LPCTSTR и соответственно макроса TEXT() - Не знаю, нужно ли это.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    HKEY keyHandle; 
    LPCTSTR rgValue = new char  [1024]; 
    LPCTSTR fnlRes = new char [1024];
    DWORD size1;
    DWORD Type;
 
 
    if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
    TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),0,
    KEY_QUERY_VALUE | KEY_WOW64_64KEY, &keyHandle) == ERROR_SUCCESS)
    {
        size1=1023;
        RegQueryValueEx( keyHandle, TEXT("CommonFilesDir"), NULL, &Type,
        (LPBYTE)rgValue,&size1);
        cout<<fnlRes<<endl;
    }
    else cout<<"Нет доступа"<<endl;
 
    cout <<rgValue;
    RegCloseKey(keyHandle);
Добавлено через 2 минуты
UPDATE:
Такое ощущение, что я пишу сам себе. И то это не форум а бложик.
Еще очень взбесил дескриптор доступа KEY_WOW64_64KEY
Почему он не существует? Пришлось заносить его в #define KEY_WOW64_64KEY 0x0100

Добавлено через 4 минуты
UPDATE2:
Нашел еще косяк. Нужно удалить cout<<fnlRes<<endl;
И Сделал обертку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string RegistryReadKey(LPCSTR key,LPCSTR subkey)
{
    HKEY keyHandle; // дескриптор указанного ключа
    LPCTSTR rgValue = new char  [1024];
    LPCTSTR fnlRes = new char [1024];
    DWORD size1;
    DWORD Type;
 
 
    if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
    TEXT(key),0,
    KEY_QUERY_VALUE | KEY_WOW64_64KEY, &keyHandle) == ERROR_SUCCESS)
    {
        size1=1023;
        RegQueryValueEx( keyHandle, TEXT(subkey), NULL, &Type,
            (LPBYTE)rgValue,&size1);
    }
    else cout<<"Нет доступа"<<endl;
 
    return rgValue;
    RegCloseKey(keyHandle);
Вызываю так:
C++
1
2
3
4
5
6
7
 cout<<"Чтение строковых ключей из реестра:"<<endl;
 
            cout<<RegistryReadKey("SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion",
                            "ProductName")<<endl;
 
            cout<<RegistryReadKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion",
                            "ProgramFilesDir")<<endl;
Надеюсь кто-то не будет так мучиться как я.ужас.


Добавлено через 1 час 57 минут
блин еще косяк нашел.
закрытие ключа, нужно делать до return! Это и дураку ясно.
C++
1
2
    RegCloseKey(keyHandle);
    return rgValue;
Вот я туплю! Кодаж это мытарство кончится ?
Обучение шло так гладко.Столько перелопатил. А тут косяк-на-косяке.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2017, 19:26
Ответы с готовыми решениями:

Аппаратные ключи. Их много. Как привязать к дистрибутивам, которых тоже много
Начну с вводных данных: имеется: 1) гора дисков 1С 7.7 торговля+склад (предположительно не сетевые). На каждом диске стоит какой-то...

Паскаль на строки, перепробовал много варианто в не 1 не работает!
Дана строка символов S. Преобразовать строку, заменив в ней каждую точку многоточием (т.е. тремя точками);

Пропадают ключи реестра
Что может быть виной, что пропадают ключи реестра или не записываются данные в реестр (кроме ограниченных прав напрямую - в данной...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2017, 19:26
Помогаю со студенческими работами здесь

Переименовать ключи реестра
есть имя параметра реестра стринг task_xxxx- содержит хххх х-0-9. Как сделать так, чтоб каждые десять секунд одна точка в его имени...

Не получается зайти в некоторые сайты перепробовал все не чего не работает
Не получается зайти на некоторые сайты и подключаться по фтп хосту не получаеться. Файл хост смотрел не чего лишнего нет. Выполнил команды...

Как восстановить ключи реестра?
Я не уверенный пользователь пк.-windows XP.Напишите пожалуйста(как проще)пошаговую инструкцию,как востановить ключи реестра.Спасибо.

Фильмы о танцах (где много, ну очень много танцев)
Привет всем! Может кто-нибудь посоветует мне фильмы, где люди много и классно танцуют???

CD не читаются, т.к. привод очень чувствительный
Есть ли какие-нибудь проги, которые крутят CD/DVD несмотря на упёртость операционной системы? А то у меня сд-ром слишком чувствительный -...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru