我正在尝试在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 位密钥。