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

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

10.01.2023, 11:49. Показов 1335. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
Модератор
2125 / 994 / 170
Регистрация: 23.07.2018
Сообщений: 3,344
Записей в блоге: 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‐пропагандист
933 / 782 / 149
Регистрация: 18.12.2014
Сообщений: 2,243
Записей в блоге: 4
10.01.2023, 22:45 4
Забудьте про UTF-8.
Юникод в виндоуз — это всегда UTF-16.
0
10.01.2023, 22:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2023, 22:45
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru