Чтение и запись реестра Windows в C ++ (Как преобразовать строку в wchar (?)) - PullRequest
0 голосов
/ 06 февраля 2019

Это часть моего задания.Я знаю, как открывать / читать ключи реестра и создавать значения, но у меня мало вопросов.Мой код:

Вот так я записываю новое значение строки в реестр:

void lCreateKeyOne(HKEY hKey, LPCWSTR lSubKey)
{
WCHAR wcValue[] = TEXT"testvalue";
LONG lNewValue = RegSetValueEx (hKey, 
                                L"MytoolsTestKey", 
                                NULL, 
                                REG_SZ,
                                (LPBYTE)wcValue,                    
                                sizeof(wcValue));
}

Это работает, но я хочу сгенерировать случайную строку и записать ее в ключ реестра.Вот как я генерирую случайную строку:

static const char alphanum[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";

int stringLength = sizeof(alphanum) - 1;

char genRandom()
{
return alphanum[rand() % stringLength];
}
srand(time(0));
string Str;
for (unsigned int i = 0; i < 20; ++i)
{
   Str += genRandom();
}
  1. Как записать его в качестве ключа реестра?
  2. как преобразовать строку Str в WCHAR wcValue []?
  3. Я попытался использовать char вместо wchar, и он пишет китайские иероглифы https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regsetvalueexa

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

А как насчет НЕ использовать string или std :: wstring,

static wchar_t const * const alphanum{
    L"0123456789"
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     "abcdefghijklmnopqrstuvwxyz" };

constexpr auto stringLength{ wcslen(alphanum) };

wchar_t genRandom()
{
    return alphanum[std::rand() % stringLength];
}

// ...
std::srand(static_cast<unsigned>(std::time(nullptr)));

wchar_t Str[20+1] = { 0 };
for (int i = 0; i < 20; i++)
{
    Str[i] = genRandom();
}

Я попытался использовать char вместо wchar, и он пишет китайские символы

Поскольку ваш метод RegSetValueEx является ссылкой на RegSetValueExW, который был получен в формате широких символов.sizeof(char) = 1 и sizeof(wchar_t) = 2, значение двух символов char читается как символ wchar_t (который, как вы видите на китайских символах).Вы можете конкретно обратиться к RegSetValueExA, если хотите попробовать использовать char.

0 голосов
/ 06 февраля 2019
static wchar_t const * const alphanum{
    L"0123456789"
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     "abcdefghijklmnopqrstuvwxyz" };

constexpr auto stringLength{ wcslen(alphanum) };

wchar_t genRandom()
{
    return alphanum[std::rand() % stringLength];
}

// ...
std::srand(static_cast<unsigned>(std::time(nullptr)));

std::wstring Str;
for (std::size_t i{}; i < 20; ++i){
   Str += genRandom();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...