C++操作注册表函数大全

来源:互联网 发布:c语音 字符数组 初始化 编辑:程序博客网 时间:2024/06/08 16:26
vc注册表操作相关函数说明

注册表的操作,API为我们提供了大约25个函数。他提供了对注册表的读取,写入,删除,以及打开注

册表及键值时所有函数,并且可以达到对注册表的备份,连接和对远端注册表进行查看等等。注册表对

整个系统十分重要,你在进行操作时,一定要先考虑清楚。这些函数有:

RegCloseKey RegConnectRegistry    RegCreateKey    RegCreateKeyEx    RegDeleteKey    RegDeleteVale  

RegEnumKey    RegFlushKey    RegGetKeySecurity(此函数,98不适用)    RegLoadKey

RegNotifyChangeKeyValue(98不适用)    RegOpenKey    RegOpenKeyEx    RegQueryInfoKey  

RegQueryValue

RegQueryValueEx    RegReplaceKey    RegRestoreKey(98不适用) RegSaveKey    RegSetKeySecurity

(98不适用)     RegSetValue    RegSetValueEx    RegUnLoadKey  

    我们对经常使用的几个函数进行介绍。

    1·RegClose()

    原形:LONG RegCloseKey(

    HKEY hKey    // 释放已经打开的注册表句柄

       );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:关闭指定的主册表键,释放句柄。当对一个或多个键或值操作完成以后,需要关闭其键来进行

保存操作结果。关闭一个键后,句柄变为非法,以使其不可再次被使用。为系统重新使用而释放句柄。

    例子

BOOL bRet = TRUE;

if( m_hKey == NULL )

    return( FALSE );

bRet = ( ::RegCloseKey( m_hKey ) == ERROR_SUCCESS );

m_hKey = NULL;

return( bRet );

    2·RegCreateKeyEx()和RegCreateKey()

    原形:LONG RegCreateKeyEx(

          HKEY hKey,          // 主键名称

          LPCTSTR lpSubKey,       // 子键名称或路径

          DWORD Reserved,        // 保留,为0

          LPTSTR lpClass,        // 没弄懂,我设为空也差不多

          DWORD dwOptions,      

               /* 对你建立的键的一些选项,可以是这些值:REG_OPTION_NON_VOLATILE,

REG_OPTION_VOLATILE,REG_OPTION_BACKUP_RESTORE第一个是默认的了。一般用第一个就可以了。*/

          REGSAM samDesired,      // 设置你对你建立的这个键的访问权限

          LPSECURITY_ATTRIBUTES lpSecurityAttributes,

               //不太明白

          PHKEY phkResult,       // 指向你建的句柄

          LPDWORD lpdwDisposition    //用来查看是打开一个已经有的键,还是新建了键

        );

    RegCreateKey()函数简单了不少,请自己看了。

    返回值:不成功返回非0,成功返回ERROR_SUCCESS.

    解释:打开指定的键或子键。如果要打开的键不存在的话,本函数会试图建立它。当在创建或打开注

册表的键时,需要指定访问权限,而这些访问权限需要到一级。默认的权限是KEY_ALL_ACCESS权限。还

有KEY_CREATE_LINK创建字符链权限,KEY_CREATE_SUB_KEY创建子键权限,KEY_EXECUTE读取键权限,

KEY_NOTIFY获得修改键通知的权限,KEY_QUERY_VALUE查询键值的权限,KEY_SET_VALUE设置数据值的权

限。注意不能在根一级建键,在注册表的根一级仅可有预定义的键。具体使用,请查看联机手册。

例子:

     HKEY m_hkey;

     DWORD dwDisposition;

     long ret0=(::RegCreateKeyEx

        (HKEY_CURRENT_USER,"REGD\",0,NULL,

        REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&m_hkey,&dwDisposition));

     if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行

     {

        MessageBox("错误: 无法打开有关的hKEY!");

        return;

     }

     if(dwDisposition==REG_OPENED_EXISTING_KEY)

        MessageBox("打开了一个已经存在的键");

     else

     {

       if(dwDisposition==REG_CREATED_NEW_KEY)

          MessageBox("建立一个新键");

     }

     RegClosekey(m_hkey);

    3·RegOpenKey()和RegOpenKeyEx()

    原形:LONG RegOpenKeyEx(

          HKEY hKey,       // 要打开主键名

          LPCTSTR lpSubKey, // 子键或路径

          DWORD ulOptions,    // 保留,为0

          REGSAM samDesired, // 操作权限标志

          PHKEY phkResult    // 指向你打开键的句柄

        );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS.

    解释:该函数负责打开指定的键或子键,如果不存在他不建立。其他和RegCreateKeyEx()和

RegCreateKey()基本相同。

    4·RegDeleteKey()

    原形:LONG RegDeleteKey(

          HKEY hKey,       // 已打开的键的句柄

          LPCTSTR lpSubKey    // 要删除的子键或路径,传如""将删除key本身

         );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    该函数用来删除注册表中的一个键值的。在用此函数时需要注意98与NT的差异。在NT中在删除一个键

之前,要求必须删除所有子键,需要从下向上递归删除所有子键,而WINDOWS98没有他那么复杂,只要

删除键及其所有子键就可以啦。

    5·RegQueryValue()和RegQueryValueEx()

    原形:LONG RegQueryValueEx(

          HKEY hKey,        // 已打开的键的句柄

          LPTSTR lpValueName, // 要查询值的名称,传如""为查询键下的默认值

          LPDWORD lpReserved, // 保留,为0

          LPDWORD lpType,     // 查询的类型

          LPBYTE lpData,      // 数据存放的地址

          LPDWORD lpcbData     // 数据长度+1

        );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:读取某子键下特定名称的值。

    例子

     CString m_strQ;//用来存放查询来的字符串值

     DWORD m_dwCount;//记录字符串的长度+1(包括NULL字符)

     ::RegQueryValueEx(m_hkey,"",0,NULL,NULL,&m_dwCount);//先查询出字节空间  

     ret1=(::RegQueryValueEx

          (m_hkey,"",0,NULL,(unsigned char *)m_strQ.GetBuffer(m_dwCount),&m_kk));

     m_strQ.ReleaseBuffer();

     MessageBox(m_strQ);

    6·RegSetValue()和RegSetValueEX()

    原形:LONG RegSetValueEx(

          HKEY hKey,        // 已打开的键的句柄

          LPCTSTR lpValueName, // 要查询值的名称,传如""为查询键下的默认值

          DWORD Reserved,     // 保留

          DWORD dwType,      // 变量的类型

          CONST BYTE *lpData, // 变量数据的地址

          DWORD cbData       // 变量的长度

        );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:设置某子键下特定名称的值。

    7·RegEnumValue()

    原形:LONG RegEnumValue(

          HKEY hKey,         // 要查询的已打开的键的句柄

          DWORD dwIndex,       // 读取名称的索引号

          LPTSTR lpValueName,     // 返回所读取的名称

          LPDWORD lpcbValueName, // 返回读取名称的长度,不含chr(0)

          LPDWORD lpReserved,     // 保留,为0

          LPDWORD lpType,       // 返回所读取的数据类型

          LPBYTE lpData,       // 返回所读取的数据

          LPDWORD lpcbData      // 返回所读取的数据长度

       );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:列出某Key的所有名称的值,变化索引即可遍历整个键下的名称和数据。

    8·RegDeleteValue()

    原形:LONG RegDeleteValue(

          HKEY hKey,        // 要删除的键的句柄

          LPCTSTR lpValueName    // 要删除的名称

        );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:删除某Key的某一名称

    9·RegEnumKey()和RegEnumKeyEx()

    原形:LONG RegEnumKeyEx(

          HKEY hKey,       // 要列举的键的句柄

          DWORD dwIndex,     // 索引

          LPTSTR lpName,     // 子键的名称

          LPDWORD lpcbName,    // 子键名称的长度

          LPDWORD lpReserved, // 保留

          LPTSTR lpClass,     // address of buffer for class string

          LPDWORD lpcbClass, // address for size of class buffer

          PFILETIME lpftLastWriteTime

             // address for time key last written to

        );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    返回注册表键及其子键的详细信息。

    10·RegQueryInfoKey()

    原形:LONG RegQueryInfoKey(

          HKEY hKey,          // 已打开的键的句柄

          LPTSTR lpClass,        // 类型名称,仅使用于NT。若不使用则传入Null

          LPDWORD lpcbClass,      // 类型名称的长度

          LPDWORD lpReserved,      // 保留

          LPDWORD lpcSubKeys,      // 返回子键的数目               

          LPDWORD lpcbMaxSubKeyLen, // 返回最长的子键长度               

          LPDWORD lpcbMaxClassLen, // 返回最长的类长度

          LPDWORD lpcValues,      // 返回值的数目               

          LPDWORD lpcbMaxValueNameLen, // 返回最长的值项名称的长度

          LPDWORD lpcbMaxValueLen, // 返回最长的值的长度

          LPDWORD lpcbSecurityDescriptor, //返回安全描述,仅适用于 NT

          PFILETIME lpftLastWriteTime    // 返回键最后被写入的时间,仅适用于 NT

       );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:返回注册表键的信息,包括类名、子键数量、最长子键名、值的数量、最长值数据、安全描述

符的长度以及上一次写入的时间等。

    11·RegLoadKey()

    原形:LONG RegLoadKey(

          HKEY hKey,      // 打开的句柄

          LPCTSTR lpSubKey, //子键的路径          

          LPCTSTR lpFile    // 要写入注册表信息的文件

        );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:从指定的文件恢复注册表键的子键信息到注册表。

    12·RegReplaceKey()

    原形:LONG RegReplaceKey(

          HKEY hKey,       // handle to open key

          LPCTSTR lpSubKey, // address of name of subkey

          LPCTSTR lpNewFile, // 在替换前生成新的备份文件

          LPCTSTR lpOldFile // 需要覆盖上注册表的文件

        );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:从指定的文件恢复注册表键的子键信息到注册表并替换原有的值,并生成新的备份文件

    13· RegSaveKey()

    LONG RegSaveKey(

       HKEY hKey,      // 要保存的句柄

       LPCTSTR lpFile, // 保存子键的文件

       LPSECURITY_ATTRIBUTES lpSecurityAttributes      //不太懂          

      );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:保存键及其子键信息到指定的文件。

    14· RegConnectRegistry()

    原形:LONG RegConnectRegistry(

          LPTSTR lpMachineName, //远程计算机的名称

          HKEY hKey,      // 预先注册的句柄

          PHKEY phkResult    // 远程计算机上的句柄

       );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    解释:连接到远程系统的注册表。

    15·RegNotifyChangeKeyValue()

    当修改指定的注册表对象时提供通知。

    16· RegUnloadKey()

    LONG RegUnLoadKey(

       HKEY hKey,       // handle to open key

       LPCTSTR lpSubKey    // address of name of subkey to unload

      );

    返回值:不成功返回非0,成功返回ERROR_SUCCESS

    删除注册表键及其所有的子键。


原创粉丝点击