• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 224  文章 - 41  trackbacks - 0
            <2008年11月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            享受編程

            常用鏈接

            留言簿(11)

            隨筆分類(159)

            隨筆檔案(224)

            文章分類(2)

            文章檔案(4)

            經典c++博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            轉:http://blog.chinaunix.net/u2/67530/showart_602802.html


                     一起學習注冊表的操作,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
            刪除注冊表鍵及其所有的子鍵。
            posted on 2009-05-22 11:24 漂漂 閱讀(3625) 評論(0)  編輯 收藏 引用 所屬分類: c++經典文章轉載
            无码任你躁久久久久久久| 九九久久自然熟的香蕉图片| 国内精品久久久久久久久| 久久国产V一级毛多内射| 久久笫一福利免费导航 | 精品久久久久久无码中文字幕| 久久精品国产免费| 精品久久久一二三区| 国产精品99精品久久免费| 国产成人久久久精品二区三区| 欧美粉嫩小泬久久久久久久| 蜜臀久久99精品久久久久久小说| 亚洲AV成人无码久久精品老人| 久久天堂AV综合合色蜜桃网| 久久国产精品国语对白| 人妻久久久一区二区三区| 欧美久久久久久午夜精品| 日产精品99久久久久久| 久久天天日天天操综合伊人av| 久久99精品国产麻豆| 久久精品中文字幕一区| 国产精品美女久久久久av爽| 欧美喷潮久久久XXXXx| 女同久久| 久久婷婷色综合一区二区| 欧美亚洲另类久久综合| 国产成人精品久久二区二区| 亚洲AV无码久久精品蜜桃| 久久午夜无码鲁丝片秋霞| 亚洲Av无码国产情品久久| 久久午夜综合久久| 久久久精品久久久久特色影视| A级毛片无码久久精品免费| 久久久久久a亚洲欧洲aⅴ| 狠狠色婷婷久久一区二区三区 | 久久久久久无码国产精品中文字幕| 久久久久免费看成人影片| 久久婷婷五月综合色高清| 99久久国产热无码精品免费| 精品久久777| 久久综合欧美成人|