首页 > 解决方案 > 使用正确的编码创建新的注册表项

问题描述

我试图在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。这是结果的img 。我的第二次尝试是这样的问题

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但奇怪的密钥data图像. 创建具有此类字符或不完整数据的密钥的原因是什么?我应该如何解决这个问题?密钥data将是一个字符串。例如:

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

更新:[已解决]

通过将Character Set项目属性更改为Use Multi-Byte Character SetAnd 这个可以解决问题:

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

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

标签: c++unicodecharacter-encodingregistryregistrykey

解决方案


推荐阅读