|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
||||||
Работа с реестром, взрыв мозга26.11.2014, 17:09. Показов 3016. Ответов 21
Метки нет (Все метки)
Хех, доброго времени суток тебе, форумчанин. В муках уже второй день, никак не могу решить проблему обнаружения данных в реестре. Что я собственно делаю в коде - ищу папку, в которую установлен Steam, далее проверяю, папка "рабочая", или "мёртвая". Рабочая - та папка, внутри которой располагаются два файла:
Первый - сам Steam.exe Второй - loginusers.vdf(файл создаётся после каждого захода в Steam, т.е. папка живая) Мёртвая же папка та, которую удалили по-средствам DEL'ита. Т.е. сама папка осталась, а внутри неё пустота. Но не суть важно. В общем - достаю путь до папки из реестра -> проверяю наличие файлов -> если файлов нет, то делаю тоже самое только с другим ключом реестра -> если файлов нет даже во второй найденной папке, то проделываю махинацию третий раз. Надеюсь понятно всё расписал, голова уже не варит, нужно передохнуть немного. Напоследок - да, я знаю что быдлокод без использования функций, но что поделать, таков мой уровень пока что.
0
|
||||||
| 26.11.2014, 17:09 | |
|
Ответы с готовыми решениями:
21
Взрыв мозга
Bf Взрыв мозга |
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|
| 26.11.2014, 17:23 [ТС] | |
|
Вот скрин, описывающий мою проблему...
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|
| 26.11.2014, 19:11 [ТС] | |
|
Ребят, ну хоть намёк дайте куда копать. По логике вещей всё должно работать. Почему выводится одно и тоже?
0
|
|
| 26.11.2014, 19:16 | |
|
А почему не проверяешь правильно ли отработала RegQueryValueEx() ???
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|
| 26.11.2014, 19:30 [ТС] | |
|
Проверяю. Создаю новый проект VS, пишу в нём код, удостоверяюсь что он правильно работает и копирую в основной проект.
0
|
|
|
Ушел с форума
|
|
| 26.11.2014, 19:41 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|
| 26.11.2014, 19:53 [ТС] | |
|
Конечно, постараюсь понятно сформулировать...
У меня есть три пути реестра, из которых нужно получить данные: 1. HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\Valve\Steam\Instal lPath" 2. HKEY_LOCAL_MACHINE, "SOFTWARE\Valve\Steam\InstallPath" 3. HKEY_CURRENT_USER, "Software\Classes\Steam\Shell\Open\Comma nd" (Тут нужно вытянуть значение "По умолчанию") Они хранят в себе путь к папке, в которую установлен Steam. Мне нужно поочерёдно вытаскивать эти значения и проверять, если ли в указанных папках два нужных файла. Т.е.: 1. Считал путь к папке 2. Проверил, есть ли в этой папке два нужных файла 3.1. Если есть - сохранить путь к этой папке 3.2. Если нет - проделать с новым путём(вытянутым из следующего значения реестра) операции сначала Я попытался это сделать (код в головном посте), но у меня почему-то везде значения из первого запроса к реестру, хотя код я несколько десятков раз перепроверил, три раза переписывал.
0
|
|
| 26.11.2014, 19:56 | |
|
На вид по коду все нормально, если не решишь до завтра проблему, запущу твой код
1
|
|
|
Ушел с форума
|
|
| 26.11.2014, 19:58 | |
|
Ну так demmax2004 выше подсказал верный путь решения:
добавьте недостающую проверку ошибок. Для RegQueryValueEx. Почему-то я уверен, что она возвращает ERROR_MORE_DATA вместо кода успеха - BufSize-то Вы не обновляете !..
1
|
|
| 26.11.2014, 19:59 | |
|
Вообще перед каждым вызовом реестра зануляй steampath
0
|
|
|
Ушел с форума
|
|
| 26.11.2014, 20:00 | |
|
И еще: "Wow6432Node" не нужно указывать в пути к ветке реестра.
Для этого есть флаги KEY_WOW64_32KEY и KEY_WOW64_64KEY.
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|||||||||||
| 26.11.2014, 20:19 [ТС] | |||||||||||
|
с Wow6432Node как раз таки и получаю, остальные почему-то молчат...
По вашим наказам изменил
0
|
|||||||||||
|
Ушел с форума
|
|
| 26.11.2014, 20:38 | |
|
kpa6uu, почитайте на MSDN описание функции RegQueryValueEx.
Последний параметр - это [in-out]: на входе размер буфера, в байтах, на выходе - сколько байт было в него записано. У вас на входе 0. Да, и без проверки того, что именно возвращает функция RegQueryValueEx дальнейшие разбирательства не имеют смысла.
1
|
|
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|
| 26.11.2014, 21:44 [ТС] | |
|
Две 234-тые ошибки.
Тааакс... 234 ошибка это ERROR_MORE_DATA (согласно winerror.pas)
0
|
|
|
Ушел с форума
|
|
| 26.11.2014, 21:53 | |
|
О чем и речь.
Схема работы с RegQueryValueEx примерно такая: 1) Выделили буфер (на стеке, через new/malloc или в виде vector<byte> - не суть) определенного размера, например 100 байт. 2) Установили BufSize = 100. 3) Вызвали функцию RegQueryValueEx. Если успех - она вернет ERROR_SUCCESS и в BufSize к-во прочитанных байт. Если нет (например, буфер слишком мал) - расширяем буфер, увеличиваем BufSize и зовем функцию снова. И так далее, пока она не вернет ERROR_SUCCESS, либо отличный от ERROR_MORE_DATA код. Да, и еще. Строковые данные, прочитанные из реестра, всегда нужно принудительно завершать нулем (т.к. строка может храниться в реестре без завершающего нуля).
1
|
|
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|
| 26.11.2014, 22:09 [ТС] | |
|
Охо-хо. Спасибо, не можешь помочь с кодом на выделение буфера?
0
|
|
|
Ушел с форума
|
|||||||||||||||||||||
| 26.11.2014, 22:11 | |||||||||||||||||||||
|
1.
1
|
|||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|
| 26.11.2014, 22:35 [ТС] | |
|
Взялся за гуж, не говори, что не дюж....
Понимаю, что глупый вопрос, но... как мне использовать это? Просто поставить перед всем кодом, или использовать отдельно для каждого запроса к реестру? Если же так, то куда вставлять? Пойму, если не ответишь
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|
| 26.11.2014, 22:39 [ТС] | |
|
Если правильно подставил, то всё равно не выходит, видно нужно на второй заход в гугл.
0
|
|
|
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
|
|
| 27.11.2014, 00:22 [ТС] | |
|
До сих пор тоже самое...
Ээх... Кто заглянет в темку - если уж не готовый ответ на подстановку буфера, так киньте статей обучающих работе с ним, буду весьма благодарен
0
|
|
| 27.11.2014, 00:22 | |
|
Помогаю со студенческими работами здесь
20
типы данных, взрыв мозга Открытие jpg из txt и взрыв мозга Куки, домен и поддомены, подгрузка AJAX, взрыв мозга создание соединения pppoe через wi-fi точку доступа (взрыв мозга) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|