Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20

Работа с реестром, взрыв мозга

26.11.2014, 17:09. Показов 3233. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хех, доброго времени суток тебе, форумчанин. В муках уже второй день, никак не могу решить проблему обнаружения данных в реестре. Что я собственно делаю в коде - ищу папку, в которую установлен Steam, далее проверяю, папка "рабочая", или "мёртвая". Рабочая - та папка, внутри которой располагаются два файла:
Первый - сам Steam.exe
Второй - loginusers.vdf(файл создаётся после каждого захода в Steam, т.е. папка живая)

Мёртвая же папка та, которую удалили по-средствам DEL'ита. Т.е. сама папка осталась, а внутри неё пустота.
Но не суть важно.

В общем - достаю путь до папки из реестра -> проверяю наличие файлов -> если файлов нет, то делаю тоже самое только с другим ключом реестра -> если файлов нет даже во второй найденной папке, то проделываю махинацию третий раз.

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

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
    //#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//
    //#                                                                                                                                #//
    //#                     Начало поиска папки Steam                                                                                 #//
    //#                     Переменная steampath                                                                                     #//
    //#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//
    DWORD BufSize = _MAX_PATH; // Как я понял - буффер
    TCHAR steamfile1[MAX_PATH], steamfile2[MAX_PATH]; // В них храним пути к файлам
    HKEY hKey; // ...
    LSTATUS st; // ...
    TCHAR steampath[MAX_PATH]; // В неё записываем ключ, полученный с реестра(путь к папке)
    TCHAR file1[] = _T("\\Steam.exe"); // Путь к первому файлу относительно "родной" папки Steam
    TCHAR file2[] = _T("\\Config\\loginusers.vdf"); // Путь ко второму файлу. Тоже относительно "родной" папки.
 
    // Начинаю работать с реестром.
    //# Ищу в первом разделе реестра
    st = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
        "SOFTWARE\\Wow6432Node\\Valve\\Steam",
        0,
        KEY_QUERY_VALUE,
        &hKey);
 
    //# Если такой раздел есть
    if (st == ERROR_SUCCESS)
    {
        RegQueryValueEx(hKey, _T("InstallPath"), NULL, NULL, (LPBYTE)steampath, &BufSize); // Записываю полученный ключ в steampath
        RegCloseKey(hKey); // Закрываю ключ
 
        lstrcpy(steamfile1, steampath); // Копирую ключ в заготовленную переменную
        lstrcpy(steamfile2, steampath); // чтобы получить в дальнейшем чистый путь к файлу
        strcat(steamfile1, file1); // steamfile1 - путь к Steam.exe
        strcat(steamfile2, file2); // steamfile2 - путь к Config/loginusers.vdf
 
        std::cout << "steampath 1: " << steampath << "\n"; // Вывожу сообщения для отладки
        std::cout << "Steam.exe: " << steamfile1 << "\n";  // к сожалению не радуют :(
        std::cout << "loginuse.vdf: " << steamfile2 << "\n\n";
    }
 
    // Если файлы не были найдены в папке steampath, то
    // ищем в другом значении реестра другой путь
    if (!FileExists(steamfile1) || !FileExists(steamfile2))
    {
        printf("nety v 1"); // Вывожу сообщение, что в первом ключе реестра файлы найдены не были.
        st = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
            "SOFTWARE\\Valve\\Steam",
            0,
            KEY_QUERY_VALUE,
            &hKey);
        if (st == ERROR_SUCCESS)
        {
            RegQueryValueEx(hKey, _T("InstallPath"), NULL, NULL, (LPBYTE)steampath, &BufSize); // Записываю полученный ключ в steampath
            RegCloseKey(hKey); // Закрываю ключ
 
            lstrcpy(steamfile1, steampath); // Копирую ключ в заготовленную переменную
            lstrcpy(steamfile2, steampath); // чтобы получить в дальнейшем чистый путь к файлу
            strcat(steamfile1, file1); // steamfile1 - путь к Steam.exe
            strcat(steamfile2, file2); // steamfile2 - путь к Config/loginusers.vdf
 
            std::cout << "steampath 2: " << steampath << "\n";
            std::cout << "Steam.exe: " << steamfile1 << "\n";
            std::cout << "loginuse.vdf: " << steamfile2 << "\n\n";
        }
    }
 
    // Если же файлы не были найдены и во втором пути, то
    // начинаю поиск последнего пути по значению реестра
    if (!FileExists(steamfile1) || !FileExists(steamfile2))
    {
        printf("nety v 2");
        st = RegOpenKeyExA(HKEY_CURRENT_USER,
            "Software\\Classes\\steam\\Shell\\Open\\Command",
            0,
            KEY_QUERY_VALUE,
            &hKey);
        if (st == ERROR_SUCCESS)
        {
            RegQueryValueEx(hKey, "assa2", NULL, NULL, (LPBYTE)steampath, &BufSize);
            RegCloseKey(hKey);
 
            lstrcpy(steamfile1, steampath);
            lstrcpy(steamfile2, steampath);
            strcat(steamfile1, file1); // steamfile1 - путь к Steam.exe
            strcat(steamfile2, file2); // steamfile2 - путь к Config/loginusers.vdf
 
            std::cout << "steampath 3: " << steampath << "\n";
            std::cout << "Steam.exe: " << steamfile1 << "\n";
            std::cout << "loginuse.vdf: " << steamfile2 << "\n\n";
        }
    }
 
    //#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//
    //#                                                                                                                                #//
    //#                     Конец поиска папки Steam                                                                                   #//
    //#                     Переменная steampath                                                                                     #//
    //#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//#//
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2014, 17:09
Ответы с готовыми решениями:

Взрыв мозга
Напишите интерпретатор практически полноценного языка &quot;Взрыв мозга&quot;. Напишите интерпретатор урезанного варианта языка программирования...

Взрыв мозга
Условие: Напишите интерпретатор практически полноценного языка &quot;Взрыв мозга&quot;. Условия те же, что и в предыдущей задаче, но...

Bf Взрыв мозга
Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод или output.txt ...

21
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
27.11.2014, 00:36
Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
vector<byte> Buffer(Size);
DWORD BuffSize = Size;
 
if (ERROR_SUCCESS == RegQueryValueExW(
    hKey, L"ValueName", 0, &ValueType, &Buffer[0], &BuffSize
    )
{
    // ...
}
1
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 20
27.11.2014, 01:09  [ТС]
Огромное спасибо за помощь. Получиться не получилось, но надеюсь завтра успешно переписать код. Темку не закрывайте, буду отписываться о ходе решения проблемы.
P.S: "вылезать" стало это, видимо нужно перекодировать byte в char(догадки)
Миниатюры
Работа с реестром, взрыв мозга  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2014, 01:09

Взрыв мозга
Напишите интерпретатор практически полноценного языка &quot;Взрыв мозга&quot;. Условия те же, что и в предыдущей задаче, но добавлены целых две...

типы данных, взрыв мозга
Объясните пожалуйста почему double x = 45.3f; Console.WriteLine(x); Дает результат: 45.2999992370605 ???? но если написать...

Открытие jpg из txt и взрыв мозга
Добрый вечер, вернее ночь)) Не знаю как это назвать, но, будучи новичком наверное назову мистикой. Я делаю полноценные ссылки в richedit и...

Куки, домен и поддомены, подгрузка AJAX, взрыв мозга
Привет всем! Уже сутки мучаюсь, мозг рвет... Есть домен site.ru, есть поддомены sub.site.ru, sub2.site.ru и т.д. На всех...

создание соединения pppoe через wi-fi точку доступа (взрыв мозга)
Всем привет! Друзья мои, озадачился тут сией проблемой. Переехал на новый адрес с получил интернет от ростелекома через pppoe. Все...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru