我使用的是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);
}
}
删除注册表键值