VCpp注册表操作

⌚Time: 2022-10-17 15:23:18

👨‍💻Author: Jack Ge

我使用的是Unicode宽字符集

注册表项操作


LSTATUS RegOpenKeyExW(

  [in]           HKEY    hKey,

  [in, optional] LPCWSTR lpSubKey,

  [in]           DWORD   ulOptions,

  [in]           REGSAM  samDesired,

  [out]          PHKEY   phkResult

);

LSTATUS RegCreateKeyW(

  [in]           HKEY    hKey,

  [in, optional] LPCWSTR lpSubKey,

  [out]          PHKEY   phkResult

);

LONG RegDeleteKeyW( HKEYhKey, LPCWSTRlpSubKey );

注册表键值操作


LSTATUS RegSetValueExW(

  [in]           HKEY       hKey,

  [in, optional] LPCWSTR    lpValueName,

                 DWORD      Reserved,

  [in]           DWORD      dwType,

  [in]           const BYTE *lpData,

  [in]           DWORD      cbData

);

LSTATUS RegQueryValueExW(

  [in]                HKEY    hKey,

  [in, optional]      LPCWSTR lpValueName,

                      LPDWORD lpReserved,

  [out, optional]     LPDWORD lpType,

  [out, optional]     LPBYTE  lpData,

  [in, out, optional] LPDWORD lpcbData

);

LONG RegDeleteValueW( HKEYhKey, LPCWSTRlpValueName );

打开和建立和删除注册表项


HKEY hKey;

LPCWSTR sub_key = L"Software\\qwertyuiop";

//RegOpenKeyExA 多字节

//RegOpenKeyExW 宽字节unicode

//尝试打开注册表

HRESULT res = ::RegOpenKeyExW(HKEY_CURRENT_USER, sub_key, 0, KEY_READ, &hKey);

//如果打开失败则建立注册表项

if (res != ERROR_SUCCESS) {

    ::RegCreateKeyW(HKEY_CURRENT_USER, sub_key, &hKey);

}

//删除注册表项

RegDeleteKeyW( HKEY_CURRENT_USER, sub_key );

写入注册表键值


HKEY hKey;

LPCWSTR sub_key = L"Software\\qwertyuiop";

CString keyName= L"test";

TCHAR keyValue[MAX_PATH] = {'a','b'};

if (ERROR_SUCCESS == ::RegOpenKeyExW(HKEY_CURRENT_USER, sub_key, 0, KEY_WRITE, &hKey)){

    RegSetValueEx(hKey, keyName,NULL,REG_SZ,(BYTE*)keyValue,MAX_PATH);

}

读取注册表键值


HKEY hKey;

LPCWSTR sub_key = L"Software\\qwertyuiop";

DWORD dwType ;

DWORD dwSize;

CString keyName= L"test";

TCHAR keyValue[MAX_PATH] = {0};

if (ERROR_SUCCESS == ::RegOpenKeyExW(HKEY_CURRENT_USER, sub_key, 0, KEY_READ, &hKey))

{

    if (ERROR_SUCCESS == ::RegQueryValueExW(hKey, keyName, NULL, &dwType, (BYTE*)keyValue, &dwSize))

    {

        MessageBox(keyValue);

    }

}

删除注册表键值


HKEY hKey;

LPCWSTR sub_key = L"Software\\qwertyuiop";

if (!RegOpenKeyEx(HKEY_CURRENT_USER, sub_key , 0, KEY_ALL_ACCESS, &hKey))

{

    RegDeleteValueW(hKey,L"key1");

}