С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
4 / 4 / 2
Регистрация: 13.11.2014
Сообщений: 108
1

RegSetValueEx запись в реестр русских символов

10.01.2023, 11:49. Показов 1350. Ответов 3

Author24 — интернет-сервис помощи студентам
Чёт не могу взять в толк как реализовать такую элементарную вещь.
Собстно вот код со всеми попытками во всех комбинациях закоммиченных строк:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <Windows.h>
#include <tchar.h>
 
std::string toUtf8(const std::wstring& str)
{
    std::string ret;
 
    int len = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(), NULL, 0, NULL, NULL);
    if (len > 0)
    {
        ret.resize(len);
        WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(), &ret[0], len, NULL, NULL);
    }
 
    return ret;
}
 
int main()
{
    std::cout << "Hello World!\n";
 
    std::string path_to_reg_full = "HKCU\\SOFTWARE\\Test_programm\\sub_test";
    std::string path_to_reg = "SOFTWARE\\Test_programm\\sub_test";
    std::string key_name = "test";
    //std::string key_value = "Test latin";
    //std::string key_value = "Тест русского текста";
    //std::string key_value = u8"Тест русского текста";
    std::string key_value = toUtf8(L"Тест русского текста");
 
    std::wstring path_to_reg_w = std::wstring(path_to_reg.begin(), path_to_reg.end());
    LPCWSTR path_to_reg_lp = path_to_reg_w.c_str();
 
    HKEY rk1 = NULL;
 
    RegCreateKeyEx(HKEY_CURRENT_USER, path_to_reg_lp, 0, NULL, 0, KEY_READ | KEY_ENUMERATE_SUB_KEYS | KEY_SET_VALUE, NULL, &rk1, NULL);
 
    std::wstring key_name_w = std::wstring(key_name.begin(), key_name.end());
    LPCWSTR key_name_lp = key_name_w.c_str();
 
    std::wstring key_value_w = std::wstring(key_value.begin(), key_value.end());
    const wchar_t* key_value_charw = key_value_w.c_str();
 
    LPTSTR key_value_lp = new TCHAR[key_value_w.size() + 1];
    _tcscpy(key_value_lp , key_value_charw);
 
    if (
        RegSetValueEx
        (
            rk1,
            key_name_lp,
            0,
            REG_SZ,
            (const BYTE*)key_value_charw,
            key_value_w.size() * 2
        )
        /*RegSetValueExW
        (
            rk1,
            key_name_lp,
            0,
            REG_SZ,
            (LPBYTE)key_value_lp,
            key_value_w.size() * 2
        )*/ != ERROR_SUCCESS
        )
    {
        bool debug_point0 = true; //тут точка остановки в VS для debug'а
    }
}

В котором и RegSetValueExW тоже пробовал. Но в реестр упорно залетают крокозябры вместо нормальных русских символов.
Среда настроена на использование Unicode, который также по идее и требует реестр. И что ему надо?
Пробовал также всевозможное экранки символов, перебирая из dencode.com, но всё не то, пробовал понять вообще какой код льётся и как-то его распознать на 2cyr.com, и там тоже ничего не понял из реестра с его японскими (или китайскими, тут я хз) символами, типо: ￐ᄁ￐ᄉ￑チ￑ツ ￑タ￑テ￑チ￑チ￐ᄎ￐ᄒ￐ᄈ￐ᄒ ￑ツ￐ᄉ￐ᄎ￑チ￑ツ￐ᄚ.
Пробовал также чистый TCHAR заливать, но там тоже всё плохо(
Что ещё можно с этим сделать, не подскажите?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2023, 11:49
Ответы с готовыми решениями:

Добавление программы в реестр (Автозагрузку) | RegSetValueEx
Приветствую, уважаемые пользователи cyberforum.ru! У меня проблема, не работает RegSetValueEx, не...

Как сделать запись в реестр win7 64. В реестр попадает только последняя запись
Добрый вечер! Не могу сделать запись в реестр win7 64. Microsoft.Win32.RegistryKey hklm =...

Запись русских символов в char
Добрый день господа!!! Мне нужно в поле char name записать 14 русских символов. Вот код: ...

Scanner и запись русских символов
Добрый день. Столкнулся с интересно проблемой, а именно записью русских символов, полученных из...

Запись русских символов в Cookie
Страница в unicode. Ввожу в текстовое поле слово (на русском языке), потом запоминаю его в Cookie,...

3
Модератор
2129 / 998 / 170
Регистрация: 23.07.2018
Сообщений: 3,346
Записей в блоге: 3
10.01.2023, 15:40 2
Лучший ответ Сообщение было отмечено КиберСталкер21 как решение

Решение

Windows Batch file
1
cl set.c /utf-8 /nologo & set.exe & reg query HKCU\My\Name /v Value & type set.c
Код
set.c

HKEY_CURRENT_USER\My\Name
    Value    REG_SZ    Значение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <windows.h>
 
int
main()
{
        RegSetKeyValueW(
                HKEY_CURRENT_USER,
                L"My\\Name",
                L"Value",
                REG_SZ,
                L"Значение",
                9*2
                );
}
#pragma comment(lib, "advapi32.lib")
(Исходник в UTF-8. Если в другой кодировке, то можно подсказать её компилятору прагмой, брать строки из ресурсов и т.д.)
1
4 / 4 / 2
Регистрация: 13.11.2014
Сообщений: 108
10.01.2023, 15:54  [ТС] 3
А во точно, есть же ещё RegSetKeyValueW, осталось с преобразованием в LPCVOID разобраться, спасибо)
0
COM‐пропагандист
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,253
Записей в блоге: 4
10.01.2023, 22:45 4
Забудьте про UTF-8.
Юникод в виндоуз — это всегда UTF-16.
0
10.01.2023, 22:45
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2023, 22:45
Помогаю со студенческими работами здесь

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

Запись (чтение) русских символов в(с) файл(а)
Вот мой кусок кода: string name; name = Console.ReadLine(); FileStream fin = new...

System.IO Запись в текстовый фаил русских символов
Пространство имен System.IO Запись в фаил русских символов Скажу сразу я первый день программирую,...

Как настроить ввод русских символов и в дальнейшем вывод этих символов
Подскажите как в этом коде настроить ввод русских символов и в дальнейшем вывод этих символов....

Чтение русских символов. Отрицательные значения у символов
Добрый вечер. Считую файл .txt. Но русские буквы получают отрицательное значение. И в итоге при...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru