|
БНТУ ФИТР
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
|
||||||
Получить данные из реестра06.05.2014, 14:08. Показов 10334. Ответов 12
Метки нет (Все метки)
Имеются данные в реестре в разделе секции автозагрузки. Необходимо получить значение ключей и данных оттуда, не зная самих имен ключей.
На скрине то что содержится в реестре и что получается в листбоксах. Подкажите в чем проблема ![]()
0
|
||||||
| 06.05.2014, 14:08 | |
|
Ответы с готовыми решениями:
12
Как вызвать функцию RegGetKeySecurity чтобы получить данные о security descriptor раздела реестра? Получить данные из реестра
|
|
Ушел с форума
|
||||||
| 06.05.2014, 20:32 | ||||||
|
1) В RegCreateKeyEx зачем-то передается KEY_ALL_ACCESS, хотя требуется
лишь доступ на чтение. Это приведет к тому, что если программа запущена от обычного пользователя (не администратор, т.н. standard user), функция вернет ошибку из-за недостатка прав (access denied). Если использовать KEY_READ, такого бы не случилось. 2) Обратите внимание: RegGetValue не только читает последний аргумент (pcbSize), но и пишет в него к-во прочитанных байт. У Вас при каждом следующем вызове это значение не обновлятется. 3) RegGetValue отсутствует на старой доброй Windows XP. Если требуется совместимость, используйте RegQueryValueEx. 4) Код вида
вернула ERROR_SUCCESS, и только в этом случае посылать строку в list box. И вообще, в хорошем коде следует проверять возвращаемые значения всех, абсолютно всех функций. А не только там, где хочется.
1
|
||||||
|
БНТУ ФИТР
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
|
||||||
| 06.05.2014, 20:53 [ТС] | ||||||
|
Убежденный, Спасибо - учел. Но вот что мне никак не дает покоя - у меня считываются не все значения. В редакторе реестра больше. В другой части программы я добавляю и удаляю программу в автозагрузку(успешно добавляется и прописывается в реестре). При этом - этот этот участок кода видит эту запись. Но если я руками( в regedit) добавляю в эту ветку запись такого типа( допустим Name - Hello, Data - world). Программа в упор её не видит.
0
|
||||||
|
Ушел с форума
|
|||
| 06.05.2014, 22:19 | |||
|
Запустите программу под отладчиком и посмотрите, как меняется значение DataSize сразу после вызова RegGetValue. А ведь в DataSize передается размер буфера для вызова следующей RegGetValue... Думаю, намек понятен. ![]() Дайте техническое описание проблемы. Например, "вызов RegGetValue возвращает ERROR_FILE_NOT_FOUND". Кстати, еще парочка моментов. 1) Посмотрите в описании RegGetValue, какие флаги принимает функция. Они все начинаются с RRF_RT. REG_MULTI_SZ среди них нету. Кстати, строковые параметры - это REG_SZ и REG_EXPAND_SZ, а REG_MULTI_SZ - это массив строк, разделенных нулем. 2) DataSize у Вас вообще не проинициализирован. При запуске в Debug-конфигурации разве программа не выбрасывает исключение типа "uninitialized variable used" ? 3) Проблемы с "видимостью" данных могут возникнуть на 64-битных Windows, там для некоторых ключей реестра заведены две ветки, одна для x86, вторая для x64. Например, HKLM\SOFTWARE и HKLM\SOFTWARE\Wow6432Node. Типичная ситуация: ваша программа (32-битная) записывает что-то в реестр, затем вы запускаете regedit (который 64-битный), заходите в нужный раздел, а там пусто. Добавлено через 15 минут И еще, пока не забыл. Строковые данные в реестре могут не заканчиваться завершающим нулем, в MSDN об этом сказано. Для надежности вы всегда должны этот ноль проверять и добавлять сами.
1
|
|||
|
БНТУ ФИТР
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
|
||||||
| 06.05.2014, 23:55 [ТС] | ||||||
|
Убежденный, Про DataSize понял
получается нужно после каждого вызова возвращать размер буффера к исходному.Я открываю просматриваю содержимое нужной мне ветви с помощью Regedit. Вижу что у меня там записи о двух программах - отлично. Запускаю программу - считал данные из этой ветви. После добавил через regedit новую запись в эту ветвь допустим Name - MyProg, Data - <путь к программе>. В Regedit отобразилась запись в соответствующей ветви. Но в программе RegEnumValue не находит нужный добавленной записи в ветвь. Ту же самую процедуру произвожу с помощью программного кода:
Вот это и проблема(
0
|
||||||
|
Ушел с форума
|
|
| 07.05.2014, 19:08 | |
|
0
|
|
|
БНТУ ФИТР
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
|
|
| 07.05.2014, 21:33 [ТС] | |
|
Убежденный, 64 ось ... Запускал сегодня на 7-ке 64 битной. Не вывело одну запись.
0
|
|
|
БНТУ ФИТР
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
|
|
| 08.05.2014, 15:03 [ТС] | |
|
Убежденный, Спецом запустил на еще одной машине на ней результат совсем печальный ... (код выше)
0
|
|
|
Ушел с форума
|
|
| 09.05.2014, 22:03 | |
|
kventin_zhuk, покажите полный код.
0
|
|
|
БНТУ ФИТР
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
|
|
| 09.05.2014, 22:29 [ТС] | |
|
Убежденный, Там ресурсы, так что один код будет неудобно. Вот весь проект. Суть такая - выводить список записей из ветки реестра и добавлять/ удвлять программу в автозагрузку.
0
|
|
|
Ушел с форума
|
|
| 09.05.2014, 23:05 | |
Сообщение было отмечено kventin_zhuk как решение
Решение
kventin_zhuk, посмотрел.
Мое резюме: код выбросить. Затем открыть в MSDN справку по функциям работы с реестром типа RegEnumValue и RegGetValue и внимательно-внимательно прочесть описание, и по каждому параметру тоже. Понять, где передается количество символов, а где байт, где есть завершающий ноль, а где его может не быть, где параметр входной, а где выходной, и так далее. Это первое. Второе. Забыть навсегда про статические массивы фиксированного размера типа "TCHAR data[1000]". Так пишут только зеленые юнцы, которые не думают о том, что стек не резиновый и что рано или поздно данных окажется больше, чем 1000 TCHAR-ов. Откройте для себя std:: (w)string или хотя бы динамические массивы. Или смартпоинтеры (типа boost::scoped_array). Третье. Это лично мое мнение, но от char/TCHAR лучше избавляться. Используйте Юникод в явном виде - main/WinMain вместо _tmain, wchar_t вместо char, MessageBoxW, std::wstring, WIN32_FIND_DATAW и т.д. На дворе двадцать первый век, всякие CP866 давно устарели и никому уже не нужны. TCHAR вообще опасен, потому что тот, кто читает ваш код, - а это можете быть вы сами, например спустя пару месяцев, - не видит, какой именно тип, - char или wchar_t, - используется в текущей конфигурации проекта и в итоге легко может напортачить. Некоторые Win32-функции ведут себя по-разному, в зависимости от строкового типа (например, CreateProcess). В cout/wcout тоже можно по ошибке передать "не тот" TCHAR, в результате вместо символов увидим кракозябры. И будет постоянная путаница, связанная с тем, что "sizeof (char) == 1", а "sizeof (wchar_t) == 2".
1
|
|
|
БНТУ ФИТР
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
|
|
| 10.05.2014, 01:34 [ТС] | |
|
Убежденный, Да уж .... лоханулся так лоханулся
![]() Cпасибо вам, разобрался)
0
|
|
|
0 / 0 / 0
Регистрация: 23.01.2020
Сообщений: 3
|
|
| 27.01.2020, 03:46 | |
|
kventin_zhuk, можеш помочь с проектом, мне нужно получить список установленных программ и вывести их на форму!????
0
|
|
| 27.01.2020, 03:46 | |
|
Помогаю со студенческими работами здесь
13
Как в VBA записать данные в реестр и читать данные из реестра?
Как прочитать данные из реестра Как из VB читать данные с реестра? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType и SDL3_ttf из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|