有关注册表API函数

来源: 作者: 2007-11-15 出处:pcdog.com

access  
  注册表的操作,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,    // 设置你对你建立的这个键的访问权限
        LPSECUR99vY_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, // 要查询值的名称,传如
更多内容请看PCdog.com--注册表编程  注册表操作  注册表知识手册专题
上一篇:用注册表保存数据(VB函数篇)
下一篇:读取注册表中一个子键下的所有子键