註冊表API函數

來源:互聯網
上載者:User

註冊表的操作,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
  刪除註冊表鍵及其所有的子鍵。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.