C++ 注册表操作
一、
LONG RegOpenKeyEx(
HKEY hKey, // 需要打开的主键的名称
LPCTSTR lpSubKey, //需要打开的子键的名称
DWORD ulOptions, // 保留,设为0
REGSAM samDesired, // 安全访问标记,也就是权限
PHKEY phkResult // 得到的将要打开键的句柄
)
hKey
[输入] 当前打开或者以下预定义的键。
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG
Windows NT/2000/XP: HKEY_PERFORMANCE_DATAWindows 95/98/Me: HKEY_DYN_DATA
lpSubKey
[输入] 以null结尾的字符串指针,包含要打开的注册表子项的名称。如果参数设置为NULL 或者指向一个空字符串,该函数将打开由hKey参数标识的键的新句柄。这种情况下,函数不会关闭先前已经打开的句柄。
ulOptions
保留,必须设置为 0
samDesired
[输入] 对指定键希望得到的访问权限的访问标记。 这个参数可以使下列值的联合。
值 Meaning
phkResult
[输出] 指向一个接收到打开的键的句柄的变量的指针。当您不再需要返回的句柄时,调用RegCloseKey函数来关闭它。
备注
不像 RegCreateKeyEx 函数,当指定键不存在 RegOpenKeyEx函数不创建新键。
Windows 95/98/Me: 注册表子键或值名称不能超过255字符。
Windows 95/98/Me: RegOpenKeyExW 被 Microsoft Layer for Unicode。 想要使用, 你必须在你的应用程序中包含某些文件。
返回值 如果函数调用成功,则返回0(ERROR_SUCCESS)。否则,返回值为文件WINERROR.h中定义的一个非零的错误代码。
二、
RegCreateKey 用于创建或打开注册表项
LONG WINAPI RegCreateKey(
_In_ HKEY hKey,
_In_opt_ LPCTSTR lpSubKey,
_Out_ PHKEY phkResult
);
hKey Long,要打开项的句柄,或者一个标准项名
lpSubKey String,欲创建的新子项。可同时创建多个项,只需用反斜杠将它们分隔开即可。例如 level1\level2\newkey
phkResult Long,指定一个变量,用于装载新子项的句柄
返回值 如果函数调用成功,则返回0(ERROR_SUCCESS)。否则,返回值为文件WINERROR.h中定义的一个非零的错误代码。
三、
RegSetValueEx 若想要设置的注册表项下不是默认值,即有名称值的数据和类型时,可以调用RegSetValueEx函数,该函数将在注册表项下设置指定值的数据和类型。
LONG
RegSetValueEx(
HKEY
hKey,
LPCTSTR
lpValueName,
DWORD
Reserved,
DWORD
dwType,
CONST
BYTE
*lpData,
DWORD
cbData
);
hKey | 一个已打开项的句柄,或指定一个标准项名 |
lpValueName | 指向一个字符串的指针,该字符串包含了欲设置值的名称。若拥有该值名称的值并不存在于指定的注册表项中,则此函数将其加入到该项。如果此值是NULL,或指向空字符串,则此函数为该项的默认值或未命名值设置类型和数据。 |
Reserved | 保留值,必须强制为0 |
dwType |
指定将被存储的数据类型,该参数可以为
REG_BINARY 任何形式的二进制数据
REG_DWORD 一个32位的数字
REG_DWORD_LITTLE_ENDIAN 一个“低字节在前”格式的32位数字
REG_DWORD_BIG_ENDIAN 一个“高字节在前”格式的32位数字
REG_EXPAND_SZ 一个以0结尾的字符串,该字符串包含对环境变量(如“%PAHT”)的
未扩展引用
REG_LINK 一个Unicode格式的带符号链接
REG_MULTI_SZ 一个以0结尾的字符串数组,该数组以连接两个0为终止符
REG_NONE 未定义值类型
REG_RESOURCE_LIST 一个设备驱动器资源列表
REG_SZ 一个以0结尾的字符串
|
lpData | 指向一个缓冲区,该缓冲区包含了欲为指定值名称存储的数据。 |
cbData |
指定由lpData参数所指向的数据的大小,单位是字节。
|
返回值 如果函数调用成功,则返回0(ERROR_SUCCESS)。否则,返回值为文件WINERROR.h中定义的一个非零的错误代码。
四、
RegCloseKey 函数功能描述:释放指定注册键的句柄
函数原型
LONG RegCloseKey(
HKEY hKey // 释放键的句柄
);
hKey : [输入] 想要关闭的已经打开的键。
返回值: 如果过程执行成功,返回值是 ERROR_SUCCESS。如果功能失败,返回一个非零值,错误码在 Winerror.h 定义。可以使用FormatMessage 函数和FORMAT_MESSAGE_FROM_SYSTEM 标记获得一个分类的错误描述。
备注: 被关闭的句柄将不可以再使用,因为已经不再有效。
RegCloseKey 函数在返回以前不能执行必要的写操作;它能够保持几秒钟为缓存执行写入磁盘,如果一个应用程序必须要写入注册表到硬盘,应该使用 RegFlushKey、RegFlushKey。.
例子:
写入注册表
1 void CHkeyTestDlg::OnBnClickedButton2() 2 { 3 // TODO: 在此添加控件通知处理程序代码 4 HKEY hKey; //主跟键名称 5 HKEY hTempKey; 6 DWORD dwValue=6; 7 DWORD dwSize=sizeof(DWORD); 8 DWORD dwType=REG_DWORD; 9 10 LPCTSTR data_Set=_T("Software"); 11 if(ERROR_SUCCESS==::RegOpenKeyEx(HKEY_CURRENT_USER,data_Set,0,KEY_SET_VALUE,&hKey)) //RegOpenKeyEx用于打开一个指定的注册表键 12 { 13 if(ERROR_SUCCESS==::RegCreateKey(hKey,_T("test111"),&hTempKey)) 14 { 15 if (ERROR_SUCCESS!=::RegSetValueEx(hTempKey,_T("Name"),0,REG_DWORD,(CONST BYTE*)&dwValue,sizeof(DWORD))) 16 { 17 AfxMessageBox(_T("错误")); 18 ::RegCloseKey(hKey); 19 return; 20 } 21 } 22 } 23 ::RegCloseKey(hKey); 24 }
五、
RegDeleteValue 是一个计算机函数,提供RS232控制和状态信号,用于删除一个键下的一个键值。
LONGWINAPIRegDeleteValue(
_In_HKEYhKey,
_In_opt_LPCTSTRlpValueName
);
hKey Long,一个已打开项的句柄,或标准项名之一
lpValueName String,要删除的值名。可设为vbNullString或一个空串,表示删除那个项的默认值
成功返回ERROR_SUCCESS ,失败返回一个非零值
例子:
删除键中的值项
1 void CHkeyTestDlg::OnBnClickedButton3() 2 { 3 // TODO: 在此添加控件通知处理程序代码 4 HKEY hKey; 5 LPCTSTR data_Set=_T("Software\\test111"); 6 if (ERROR_SUCCESS==::RegOpenKeyEx(HKEY_CURRENT_USER,data_Set,0,KEY_SET_VALUE,&hKey)) 7 { 8 if (ERROR_SUCCESS!=::RegDeleteValue(hKey,_T("Name"))) 9 { 10 AfxMessageBox(_T("错误")); 11 ::RegCloseKey(hKey); 12 return; 13 } 14 } 15 ::RegCloseKey(hKey); 16 }