主要用到三个Functions:
#define RegOpenKeyEx RegOpenKeyExA
RegOpenKeyExA(
_In_ HKEY hKey,
_In_opt_ LPCSTR lpSubKey,
_In_opt_ DWORD ulOptions,
_In_ REGSAM samDesired,
_Out_ PHKEY phkResult
);
#define RegSetValueEx RegSetValueExA
RegSetValueExA(
_In_ HKEY hKey,
_In_opt_ LPCSTR lpValueName,
_Reserved_ DWORD Reserved,
_In_ DWORD dwType,
_In_reads_bytes_opt_(cbData) CONST BYTE * lpData,
_In_ DWORD cbData
);
RegCloseKey(
_In_ HKEY hKey
);
小例程:
#include <io.h>
#include <Windows.h>
#include <iostream>
INT WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
{
char _buf[1000];
std::string path;
GetModuleFileName(NULL, _buf,1000);
path.append(_buf);
HKEY hkey;
if(RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS, &hkey) == ERROR_SUCCESS)
{
RegSetValueEx(hkey, TEXT("Test"), 0, REG_SZ, (LPBYTE)path.c_str(), path.length());
}
RegCloseKey(hkey);
}
Tips:
#define HKEY_CURRENT_USER (( HKEY ) (ULONG_PTR)((LONG)0x80000001) )
#define HKEY_LOCAL_MACHINE (( HKEY ) (ULONG_PTR)((LONG)0x80000002) )
#define HKEY_USERS (( HKEY ) (ULONG_PTR)((LONG)0x80000003) )
三者针对的权限不同,如果是
HKEY_LOCAL_MACHINE
则需要管理员权限。