在 c++ 中编辑注册表项



我正在尝试在Windows中创建一个注册表项值以在登录时运行我的程序这是我尝试过的:

#include <windows.h>
#include <WinReg.h>
#include <iostream>
#pragma comment(lib,"Advapi32.lib")
using namespace std;
int main () {
HKEY hKey;          
DWORD buffersize = 4;
DWORD data = 3;
if(ERROR_SUCCESS == RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\Microsoft\Windows\CurrentVersion\Run", 0, KEY_SET_VALUE, &hKey)) 
{ 
if (RegSetValueExW(hKey, L"test", 0, REG_SZ, (LPBYTE)&data, sizeof(data)))
{ 
RegCloseKey (hKey); 
return FALSE; 
}
RegCloseKey (hKey); 
} 
}

即使以管理员身份运行,这似乎也没有创造价值,我做错了什么?

1(在写作时使用RegCreateKeyEx,键可能不存在。

2(您正在写入DWORD数据,但将其存储为字符串,调用将成功,但基本上是损坏的数据。

WCHAR buf[] = L"foo bar";
RegSetValueExW(hKey, L"a string", 0, REG_SZ, (LPBYTE)buf, sizeof(buf)));
DWORD num = 42;
RegSetValueExW(hKey, L"a DWORD", 0, REG_WORD, (LPBYTE)&num, sizeof(num)));

3( 32 位 Windows 上的 64 位进程写入不同的区域,在 Regedit 中,您必须在HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRun下查看。使用KEY_SET_VALUE|KEY_WOW64_64KEY访问 32 位应用中的 64 位密钥。

最新更新