首页 > 解决方案 > Reading And Writing Windows Registry in C++ (How to convert string to wchar(?))

问题描述

This is a part of my assignment. I know how to open/read registry keys and create values, but i have few questions. My code:

This is how i write new string value into registry:

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

It works, but i want to generate random string and write it into registry key. This is how i generate random string:

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. How to write it as registry key ?
  2. how to convert string Str to WCHAR wcValue[] ?
  3. I tried to use char instead of wchar and it writes chinese characters https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regsetvalueexa

标签: c++winapi

解决方案


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();
}

推荐阅读