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 }
posted @ 2018-07-16 09:37  小雨滴答  阅读(491)  评论(0编辑  收藏  举报