• <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
            <2010年2月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28123456
            78910111213

            享受編程

            常用鏈接

            留言簿(11)

            隨筆分類(159)

            隨筆檔案(224)

            文章分類(2)

            文章檔案(4)

            經(jīng)典c++博客

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            轉(zhuǎn):http://blog.chinaunix.net/u2/67530/showart_602802.html


                     一起學(xué)習(xí)注冊(cè)表的操作,API為我們提供了大約25個(gè)函數(shù)。他提供了對(duì)注冊(cè)表的讀取,寫入,刪除,以及打開注冊(cè)表及鍵值時(shí)所有函數(shù),并且可以達(dá)到對(duì)注冊(cè)表的備份,連接和對(duì)遠(yuǎn)端注冊(cè)表進(jìn)行查看等等。注冊(cè)表對(duì)整個(gè)系統(tǒng)十分重要,你在進(jìn)行操作時(shí),一定要先考慮清楚。這些函數(shù)有:
                           RegCloseKey RegConnectReGIStry RegCreateKey RegCreateKeyEx RegDeleteKey RegDeleteVale 
                           RegEnumKey RegFlushKey RegGetKeySecurity(此函數(shù),98不適用) RegLoadKey 
                           RegNotifyChangeKeyValue(98不適用) RegOpenKey RegOpenKeyEx RegQueryInfoKey RegQueryValue
                           RegQueryValueEx RegReplaceKey RegRestoreKey(98不適用) RegSaveKey RegSetKeySecurity(98不適用) RegSetValue RegSetValueEx RegUnLoadKey
            我們對(duì)經(jīng)常使用的幾個(gè)函數(shù)進(jìn)行介紹。

            1·RegClose()
                原形:LONG RegCloseKey(
                HKEY hKey // 釋放已經(jīng)打開的注冊(cè)表句柄
                );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:關(guān)閉指定的主冊(cè)表鍵,釋放句柄。當(dāng)對(duì)一個(gè)或多個(gè)鍵或值操作完成以后,需要關(guān)閉其鍵來(lái)進(jìn)行保存操作結(jié)果。關(guān)閉一個(gè)鍵后,句柄變?yōu)榉欠ǎ允蛊洳豢稍俅伪皇褂?。為系統(tǒng)重新使用而釋放句柄。
                例子
            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, // 沒(méi)弄懂,我設(shè)為空也差不多
            DWORD dwOptions,
            /* 對(duì)你建立的鍵的一些選項(xiàng),可以是這些值:REG_OPTION_NON_VOLATILE,REG_OPTION_VOLATILE,REG_OPTION_BACKUP_RESTORE第一個(gè)是默認(rèn)的了。一般用第一個(gè)就可以了。*/
            REGSAM samDesired, // 設(shè)置你對(duì)你建立的這個(gè)鍵的訪問(wèn)權(quán)限
            LPSECURITY_ATTRIBUTES lpSecurityAttributes,
            //不太明白
            PHKEY phkResult, // 指向你建的句柄
            LPDWORD lpdwDisposition //用來(lái)查看是打開一個(gè)已經(jīng)有的鍵,還是新建了鍵
            );
            RegCreateKey()函數(shù)簡(jiǎn)單了不少,請(qǐng)自己看了。
            返回值:不成功返回非0,成功返回ERROR_SUCCESS.
            解釋:打開指定的鍵或子鍵。如果要打開的鍵不存在的話,本函數(shù)會(huì)試圖建立它。當(dāng)在創(chuàng)建或打開注冊(cè)表的鍵時(shí),需要指定訪問(wèn)權(quán)限,而這些訪問(wèn)權(quán)限需要到一級(jí)。默認(rèn)的權(quán)限是KEY_ALL_Access權(quán)限。還有KEY_CREATE_LINK創(chuàng)建字符鏈權(quán)限,KEY_CREATE_SUB_KEY創(chuàng)建子鍵權(quán)限,KEY_EXECUTE讀取鍵權(quán)限,KEY_NOTIFY獲得修改鍵通知的權(quán)限,KEY_QUERY_VALUE查詢鍵值的權(quán)限,KEY_SET_VALUE設(shè)置數(shù)據(jù)值的權(quán)限。注意不能在根一級(jí)建鍵,在注冊(cè)表的根一級(jí)僅可有預(yù)定義的鍵。具體使用,請(qǐng)查看聯(lián)機(jī)手冊(cè)。
            例子:
            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) //如果無(wú)法打開hKEY,則終止程序的執(zhí)行
            {
            MessageBox("錯(cuò)誤: 無(wú)法打開有關(guān)的hKEY!");
            return;
            }
            if(dwDisposition==REG_OPENED_EXISTING_KEY)
            MessageBox("打開了一個(gè)已經(jīng)存在的鍵");
            else
            {
            if(dwDisposition==REG_CREATED_NEW_KEY)
            MessageBox("建立一個(gè)新鍵");
            }
            RegClosekey(m_hkey);

            3·RegOpenKey()和RegOpenKeyEx()
            原形:LONG RegOpenKeyEx(
            HKEY hKey, // 要打開主鍵名
            LPCTSTR lpSubKey, // 子鍵或路徑
            DWORD ulOptions, // 保留,為0
            REGSAM samDesired, // 操作權(quán)限標(biāo)志
            PHKEY phkResult // 指向你打開鍵的句柄
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS.
            解釋:該函數(shù)負(fù)責(zé)打開指定的鍵或子鍵,如果不存在他不建立。其他和RegCreateKeyEx()和RegCreateKey()基本相同。

            4·RegDeleteKey()
            原形:LONG RegDeleteKey(
            HKEY hKey, // 已打開的鍵的句柄
            LPCTSTR lpSubKey // 要?jiǎng)h除的子鍵或路徑,傳如""將刪除key本身
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            該函數(shù)用來(lái)刪除注冊(cè)表中的一個(gè)鍵值的。在用此函數(shù)時(shí)需要注意98與NT的差異。在NT中在刪除一個(gè)鍵之前,要求必須刪除所有子鍵,需要從下向上遞歸刪除所有子鍵,而Windows98沒(méi)有他那么復(fù)雜,只要?jiǎng)h除鍵及其所有子鍵就可以啦。

            5·RegQueryValue()和RegQueryValueEx()
            原形:LONG RegQueryValueEx(
            HKEY hKey, // 已打開的鍵的句柄
            LPTSTR lpValueName, // 要查詢值的名稱,傳如""為查詢鍵下的默認(rèn)值
            LPDWORD lpReserved, // 保留,為0
            LPDWORD lpType, // 查詢的類型
            LPBYTE lpData, // 數(shù)據(jù)存放的地址
            LPDWORD lpcbData // 數(shù)據(jù)長(zhǎng)度 1
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:讀取某子鍵下特定名稱的值。
            例子
            CString m_strQ;//用來(lái)存放查詢來(lái)的字符串值
            DWORD m_dwCount;//記錄字符串的長(zhǎng)度 1(包括NULL字符)
            ::RegQueryValueEx(m_hkey,"",0,NULL,NULL,&m_dwCount);//先查詢出字節(jié)空間
            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, // 要查詢值的名稱,傳如""為查詢鍵下的默認(rèn)值
            DWORD Reserved, // 保留
            DWORD dwType, // 變量的類型
            CONST BYTE *lpData, // 變量數(shù)據(jù)的地址
            DWORD cbData // 變量的長(zhǎng)度
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:設(shè)置某子鍵下特定名稱的值。

            7·RegEnumValue()
            原形:LONG RegEnumValue(
            HKEY hKey, // 要查詢的已打開的鍵的句柄
            DWORD dwIndex, // 讀取名稱的索引號(hào)
            LPTSTR lpValueName, // 返回所讀取的名稱
            LPDWORD lpcbValueName, // 返回讀取名稱的長(zhǎng)度,不含chr(0)
            LPDWORD lpReserved, // 保留,為0
            LPDWORD lpType, // 返回所讀取的數(shù)據(jù)類型
            LPBYTE lpData, // 返回所讀取的數(shù)據(jù)
            LPDWORD lpcbData // 返回所讀取的數(shù)據(jù)長(zhǎng)度
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:列出某Key的所有名稱的值,變化索引即可遍歷整個(gè)鍵下的名稱和數(shù)據(jù)。

            8·RegDeleteValue()
            原形:LONG RegDeleteValue(
            HKEY hKey, // 要?jiǎng)h除的鍵的句柄
            LPCTSTR lpValueName // 要?jiǎng)h除的名稱
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:刪除某Key的某一名稱

            9·RegEnumKey()和RegEnumKeyEx()
            原形:LONG RegEnumKeyEx(
            HKEY hKey, // 要列舉的鍵的句柄
            DWORD dwIndex, // 索引
            LPTSTR lpName, // 子鍵的名稱
            LPDWORD lpcbName, // 子鍵名稱的長(zhǎng)度
            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
            返回注冊(cè)表鍵及其子鍵的詳細(xì)信息。

            10·RegQueryInfoKey()
            原形:LONG RegQueryInfoKey(
            HKEY hKey, // 已打開的鍵的句柄
            LPTSTR lpClass, // 類型名稱,僅使用于NT。若不使用則傳入Null
            LPDWORD lpcbClass, // 類型名稱的長(zhǎng)度
            LPDWORD lpReserved, // 保留
            LPDWORD lpcSubKeys, // 返回子鍵的數(shù)目
            LPDWORD lpcbMaxSubKeyLen, // 返回最長(zhǎng)的子鍵長(zhǎng)度
            LPDWORD lpcbMaxClassLen, // 返回最長(zhǎng)的類長(zhǎng)度
            LPDWORD lpcValues, // 返回值的數(shù)目
            LPDWORD lpcbMaxValueNameLen, // 返回最長(zhǎng)的值項(xiàng)名稱的長(zhǎng)度
            LPDWORD lpcbMaxValueLen, // 返回最長(zhǎng)的值的長(zhǎng)度
            LPDWORD lpcbSecurityDescriptor, //返回安全描述,僅適用于 NT
            PFILETIME lpftLastWriteTime // 返回鍵最后被寫入的時(shí)間,僅適用于 NT
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:返回注冊(cè)表鍵的信息,包括類名、子鍵數(shù)量、最長(zhǎng)子鍵名、值的數(shù)量、最長(zhǎng)值數(shù)據(jù)、安全描述符的長(zhǎng)度以及上一次寫入的時(shí)間等。

            11·RegLoadKey()
            原形:LONG RegLoadKey(
            HKEY hKey, // 打開的句柄
            LPCTSTR lpSubKey, //子鍵的路徑
            LPCTSTR lpFile // 要寫入注冊(cè)表信息的文件
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:從指定的文件恢復(fù)注冊(cè)表鍵的子鍵信息到注冊(cè)表。

            12·RegReplaceKey()
            原形:LONG RegReplaceKey(
            HKEY hKey, // handle to open key
            LPCTSTR lpSubKey, // address of name of subkey
            LPCTSTR lpNewFile, // 在替換前生成新的備份文件
            LPCTSTR lpOldFile // 需要覆蓋上注冊(cè)表的文件
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:從指定的文件恢復(fù)注冊(cè)表鍵的子鍵信息到注冊(cè)表并替換原有的值,并生成新的備份文件

            13· RegSaveKey()
            LONG RegSaveKey(
            HKEY hKey, // 要保存的句柄
            LPCTSTR lpFile, // 保存子鍵的文件
            LPSECURITY_ATTRIBUTES lpSecurityAttributes //不太懂
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:保存鍵及其子鍵信息到指定的文件。

            14· RegConnectRegistry()
            原形:LONG RegConnectRegistry(
            LPTSTR lpMachineName, //遠(yuǎn)程計(jì)算機(jī)的名稱
            HKEY hKey, // 預(yù)先注冊(cè)的句柄
            PHKEY phkResult // 遠(yuǎn)程計(jì)算機(jī)上的句柄
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            解釋:連接到遠(yuǎn)程系統(tǒng)的注冊(cè)表。

            15·RegNotifyChangeKeyValue()
            當(dāng)修改指定的注冊(cè)表對(duì)象時(shí)提供通知。

            16· RegUnloadKey()
            LONG RegUnLoadKey(
            HKEY hKey, // handle to open key
            LPCTSTR lpSubKey // address of name of subkey to unload
            );
            返回值:不成功返回非0,成功返回ERROR_SUCCESS
            刪除注冊(cè)表鍵及其所有的子鍵。
            posted on 2009-05-22 11:24 漂漂 閱讀(3644) 評(píng)論(0)  編輯 收藏 引用 所屬分類: c++經(jīng)典文章轉(zhuǎn)載
            亚洲国产精品久久久天堂 | 国产AⅤ精品一区二区三区久久| 久久中文字幕人妻丝袜| 久久久午夜精品| 国产69精品久久久久久人妻精品| 狠狠色丁香婷婷久久综合五月| 奇米综合四色77777久久| 91久久精一区二区三区大全| 国产午夜精品理论片久久| 欧美久久久久久午夜精品| 国产偷久久久精品专区| 国产精品九九久久免费视频| 欧美日韩精品久久久免费观看| 国产69精品久久久久777| 久久久亚洲精品蜜桃臀| 婷婷五月深深久久精品| 久久久久久久综合综合狠狠| 2021精品国产综合久久| 久久亚洲日韩看片无码| 久久99精品久久久久久秒播| 亚洲欧美伊人久久综合一区二区 | 亚洲精品高清国产一线久久| 狠狠人妻久久久久久综合| 日韩人妻无码精品久久久不卡| 久久se精品一区二区影院| www.久久热| 国产成人综合久久综合| 久久综合狠狠综合久久| 久久狠狠爱亚洲综合影院| 国产精品一区二区久久精品无码| 国产精品久久免费| 久久国产精品成人影院| 久久亚洲精品成人AV| 亚洲精品美女久久久久99| 久久综合九色综合网站| 亚洲中文精品久久久久久不卡 | 国产一级持黄大片99久久| 日韩精品久久久久久免费| 色狠狠久久AV五月综合| 久久青青草原精品国产| 久久久久国产精品熟女影院|