Dav*_*vid 1 c++ registry winapi types
标题几乎说明了一切,当我尝试使用RegSetValueEx做一个REG_SZ大小的条目,我得到一个REG_EXPAND_SZ当我看到注册表.
这是我正在使用的代码
const char REG_KEY_PATH[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
const char REG_VALUE_NAME[] = "Scroff";
// Get where the app lives
char appLoc[MAX_PATH];
GetModuleFileNameA(NULL, appLoc, MAX_PATH);
// Create the key value
HKEY regKey = 0;
RegCreateKeyExA(HKEY_LOCAL_MACHINE, REG_KEY_PATH, 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE | KEY_WOW64_64KEY,
NULL, ®Key, NULL);
RegSetValueExA(regKey, REG_VALUE_NAME, 0, RRF_RT_REG_SZ, (unsigned char*)appLoc, strlen(appLoc));
Run Code Online (Sandbox Code Playgroud)
该代码有效,但它不是具有REG_SZ类型的注册表,而是REG_EXPAND_SZ.为什么会这样,我该如何解决?
我使用VS 2015 Enterprise在Windows 10上运行.
谢谢.
您需要将REG_SZ标志作为第4个参数传递RegSetValueEx()以创建REG_SZ值. RRF_RT_XXX标志仅对有效RegGetValue().
您的代码正在创建REG_EXPAND_SZ值,因为该RRF_RT_REG_SZ标志的值为2,这恰好与该REG_EXPAND_SZ标志的值相同.