zoukankan      html  css  js  c++  java
  • 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,欲创建的新子项。可同时创建多个项,只需用反斜杠将它们分隔开即可。例如 level1level2 ewkey
    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 }
  • 相关阅读:
    redis 数据库总结
    drf 序列化类总结
    drf 视图类经典总结
    celery 简介
    虚拟环境搭建pip换源
    git 与 svn,简介差别
    redis 数据库简介
    auth 模块
    python的注释与用户交互 基本数据类型
    python入门
  • 原文地址:https://www.cnblogs.com/qiwu1314/p/9316120.html
Copyright © 2011-2022 走看看