我正在使用此功能将程序添加到启动中。但这不起作用,我也不知道为什么奇怪的ascii字符和单词会出现在启动应用程序中。我在做什么错了?
而是将其添加到starup。 U㫅萹㐀蠀渐晁Ɉ
U㫆萺㝈耀
U㫆萺㝈耀
和C
。没有文件位置,也没有详细信息。
HKEY NewVal;
char loggeduser[UNLEN + 1];
std::ostringstream fileinhome;
GetUserNameA(loggeduser, &len);
fileinhome << "C:\\Users\\" << loggeduser << "\\AppData\\Roaming\\snetwork\\snetwork.exe";
std::string fp = fileinhome.str();
const char* file = fp.c_str();
if (RegOpenKey(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), &NewVal) != ERROR_SUCCESS)
{
return;
}
if (RegSetValueEx(NewVal, _T("CLI-Social-Network"), 0, REG_SZ, (LPBYTE)file, sizeof(file)) != ERROR_SUCCESS)
{
return;
}
else {
// std::cout << "Program added to Startup.\n";
// Do nothing, Program was added to Startup
}
RegCloseKey(NewVal);
答案 0 :(得分:1)
一种可能性:您定义了UNICODE
和/或_UNICODE
,因此RegSetValueEx
实际上是RegSetValueExW
。因此,此函数将Unicode数据传递到缓冲区file
中。但是file
是ASCII缓冲区,因此,否则有效的Unicode数据被错误地解析为ASCII,从而导致输出奇怪。
要解决此问题,请显式使用std::wstring
和W
函数。
Unicode方面的考虑外,您不能使用const char *
作为接收数据的缓冲区。您必须先为缓冲区分配足够的内存。