Как записать строку Unicode в 2-х формах (строки и двоичные) в реестр? - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть диалоговая программа. У него есть поле для редактирования, где я получаю информацию от пользователя. Я должен записать входную строку Unicode в реестр в 2 формах, в строковой форме с использованием REG_SZ и в двоичной форме (utf-8 HEXA) с использованием REG_BINARY. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вместо использования CString вы можете использовать std :: wstring - вот пример, где целое число преобразуется в wstring, а затем помещается в ключ реестра REG_SZ.

bool SetRegistryKeyValue(int NewSetting) const
{
    bool result = false;
    HKEY hkey = nullptr;
    std::wstring str = std::to_wstring(NewSetting);


    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, STRING_REGISTRY_KEY, 0, KEY_WRITE, &hkey) == ERROR_SUCCESS) {
        RegSetValueExW(hkey, STRING_REGISTRY_VALUE, NULL, REG_SZ, (BYTE*)str.c_str(), str.size());
        RegCloseKey(hkey);
        result = true;
    }
    return result;
}
0 голосов
/ 22 ноября 2010
CString txt;
    m_wndEdit.GetWindowText(txt);

    HKEY key;
    HKEY    KeySet   = HKEY_CURRENT_USER;
    if (ERROR_SUCCESS == RegOpenKeyExW(KeySet,_T("Software\\MyApp"),0,KEY_ALL_ACCESS,&key))
    {       
        if (ERROR_SUCCESS == 
            RegSetValueExW(key, _T("MyParamSZ"), 0,REG_SZ, (BYTE*)txt.GetString(), txt.GetLength()))
        {

        }
        if (ERROR_SUCCESS == 
            RegSetValueExW(key, _T("MyParamBIN"), 0,REG_BINARY, (BYTE*)txt.GetString(), txt.GetLength() * sizeof(WCHAR)))
        {

        }
RegCloseKey(key);
    }
...