在注册表中设置DWORD值

Adr*_*ian 5 c++ windows registry winapi

我正在尝试在注册表中设置DWORD值.我使用文本值,但现在我想用数字(0)设置另一个值.但它并没有写出来.
这是我的代码:

RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\pager", 0, KEY_ALL_ACCESS, &hKey);
RegSetValueEx(hKey, TEXT("Save"), 0, REG_SZ, (const BYTE*)0x00, sizeof(DWORD));
RegCloseKey(hKey);
Run Code Online (Sandbox Code Playgroud)

PS:密钥已经存在,值为1,所以我试图用值0覆盖它(我没有创建一个新的).

Mat*_*lia 19

最大的错误在于(const BYTE*)0x00:您将0x00转换为a BYTE *,这意味着您基本上是在传递NULL指针.相反,您应该创建一个DWORD变量,将要存储的值放在注册表中,并将指针传递给它而不是它0x00.

此外,如果要存储值,则必须更改REG_SZ为,否则将被解释为(有点奇怪)字符串.REG_DWORDDWORDDWORD

RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\pager", 0, KEY_ALL_ACCESS, &hKey);
DWORD value=0;
RegSetValueEx(hKey, TEXT("Save"), 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
RegCloseKey(hKey);
Run Code Online (Sandbox Code Playgroud)

但是,最重要的是,你应该真正检查这些函数的返回值:现在你只是"希望"它们工作,忽略任何失败并继续执行指令流程,这可能导致意外情况.

如果您检查了错误代码,您会立即注意到它是RegSetValueEx失败的函数,并且错误代码可能类似于"无效参数",这会指向正确的方向.