使用正确的编码创建新的注册表项

时间:2018-07-21 09:26:44

标签: c++ unicode character-encoding registry registrykey

我正在尝试借助this answer from cplusplus在HKCU中创建新密钥:

HKEY hkey;
RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hkey);
const LPCSTR program = "program";
const wchar_t* path = L"(C:\\Users\\Desktop\\wallpaper.jpg)";
RegSetValueEx(hkey, LPCWSTR(program), 0, REG_SZ, (BYTE*)path, wcslen(path));
RegCloseKey(hkey);

但是它将创建一个具有奇怪的name和不完整的data的密钥。这是结果的的图片。 我的第二次尝试是so question

HKEY key;
const char* path = "C:\\Users\\Desktop\\wallpaper.jpg";
RegOpenKey(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), &key);
RegSetValueEx(key, TEXT("value_name"), 0, REG_SZ, LPBYTE(path), sizeof path * sizeof(char));
RegCloseKey(key);

它将创建一个具有正确name但又奇怪的dataimg的密钥。用这样的字符或不完整的数据创建密钥的原因是什么?我该如何解决?键的data将是一个字符串。例如:

Name    | Type   | Data
KeyName | REG_SZ | c:\user\...

更新:[已解决]

通过将项目属性中的Character Set更改为Use Multi-Byte Character Set,这一点将达到目的:

HKEY key; 
const char* path = R"("C:\Users\Desktop\program.bat")";
RegOpenKey(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), &key);
RegSetValueEx(key, TEXT("value_name"), 0, REG_SZ, LPBYTE(path), strlen(path));
RegCloseKey(key);

我已经多次编辑了问题,该问题更加清晰,现在不再重复。你们可以重新打开它并支持这个问题吗?我在第二个问题中已经达到问题的极限。太残忍了。

0 个答案:

没有答案