簡體   English   中英

用 C++ 讀寫 Windows 注冊表(如何將字符串轉換為 wchar(?))

[英]Reading And Writing Windows Registry in C++ (How to convert string to wchar(?))

這是我任務的一部分。 我知道如何打開/讀取注冊表項並創建值,但我有幾個問題。 我的代碼:

這就是我將新字符串值寫入注冊表的方式:

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

不使用字符串或 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) = 1sizeof(wchar_t) = 2 ,兩個char字符的值被讀取為一個wchar_t字符(如你所見的中文字符)。 如果您想嘗試使用char您可以專門參考RegSetValueExA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM