<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    hello world

    隨筆 - 2, 文章 - 63, 評論 - 0, 引用 - 0
    數據加載中……

    用Visual C++實現注冊表簡單操作

    一、實現方法

      對注冊表的編程要用到句柄,我們需要通過一個句柄訪問注冊表鍵值,當打開或創建一個鍵值的時候,會返回一個該鍵的句柄,并且調用和分析鍵和創建鍵值, 在分析和創建的同時需要傳遞句柄到函數。WINDOWS提供預定義的用語---根一級鍵的保留句柄,如 HKEY_CLASS_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USER等,這些都是與注冊表 的根鍵相對應并且同名的句柄。當訪問一個根鍵的時候,傳遞這些通用句柄。這就不用打開根鍵啦,因為他們總是在打開狀態下,可使用默認鍵的句柄訪問。

      Win32 API提供了大約25個有關注冊表的函數,他提供了對注冊表的讀取,寫入,刪除,以及打開注冊表的所有函數,并且可以實現對注冊表備份,連接和對遠端注冊 表進行查看等功能。但是在編程的時候首先需要考慮你是在什么操作系統編輯此類程序,雖然微軟的操作系統,如NT和Windows98都是32位操作系統, 但是有些API函數中并不支持98,這點是要注意的。API經歷和發展了很多年,有些函數已經重復,比如RegSetValue()及 RegSetValueEx()都是用來設置注冊表鍵值的,兩者的區別在于前者是設置注冊表鍵的默認值,僅支持作為數據類型的字符串,而后者不僅繼承了前 者的所有功能而且還能對多值或類型進行操作。一般API對比較新的函數都會在后綴追加"Ex"的同樣名稱函數,建議在編程中均應盡可能的使用高級函數。下 面介紹一些比較常用的操作注冊表的API函數:

      1、RegCloseKey()

      原型:RegCloseKey(HKEY hKey)

      解釋:關閉指定的主冊表鍵,釋放句柄。當對一個或多個鍵或值操作完成以后,需要關閉其鍵來進行保存操作結果,關閉一個鍵后,句柄變為非法,此時應釋放句柄。

      2、RegCreateKeyEx()

      原型:LONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved,
    LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    PHKEY phkResult, LPDWORD lpdwDisposition );

      解釋:打開指定的鍵或子鍵。如果要打開的鍵不存在的話,本函數會試圖建立它。提供該函數是為了向后兼容。所有的WIN32應用程序應使用函數RegCreateKeyEx()。各參數及返回值的含義如下:

      各參數及返回值的含義如下:

      ·hKey為主鍵值,可以取下面的一些數值:HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG、   HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USER、 HKEY_PERFORMANCE_DATA(WINNT操作系統)、HKEY_DYN_DATA(WIN9X操作系統);

      ·參數lpSubKey為一個指向以零結尾的字符串的指針,其中包含將要創建或打開的子鍵的名稱。子鍵不可以用反斜線(\)開始。該參數可以為NULL;

      ·參數Reserved為保留值,必須設置為0;

      ·參數lpClass為一個指向包含鍵類型的字符串。如果該鍵已經存在,則忽略該參數;

      ·參數dwOptions為新創建的鍵設置一定的屬性。可以取下面的一些數值:  REG_OPTION_NON_VOLATILE ,表示新創建的鍵為一個非短暫性的鍵(數據信息保存在文件中,當系統重新啟動時,數據信息恢復);REG_OPTION_VOLATILE,表示新創建的 鍵為一個短暫性的鍵(數據信息保存在內存中),Windows95忽略該數值;REG_OPTION_BACKUP_RESTORE 僅在WINNT中支持,可以提供優先級支持;

      ·參數samDesired用來設置對鍵訪問的權限,可以取下面的一些數值:KEY_CREATE_LINK,表示準許生成符號鍵;KEY_CREATE_SUB_KEY 表示準許生成子鍵;KEY_ENUMERATE_SUB_KEYS 表示準許生成枚舉子鍵;KEY_EXECUTE 表示準許進行讀操作;KEY_NOTIFY表示準許更換通告;   KEY_QUERY_VALUE 表示準許查詢子鍵;KEY_ALL_ACCESS 提供完全訪問,是上面數值的組合;

      KEY_READ 是下面數值的組合:KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY;  KEY_SET_VALUE 表示準許設置子鍵的數值;KEY_WRITE 是下面數值的組合:KEY_SET_VALUE、KEY_CREATE_SUB_KEY;

      ·參數lpSecurityAttributes為一個指向SECURITY_ATTRIBUTES結構的指針,確定返回的句柄是否被子處理過程繼承。如果該參數為NULL,則句柄不可以被繼承。在WINNT中,該參數可以為新創建的鍵增加安全的描述;

      ·參數phkResult為一個指向新創建或打開的鍵的句柄的指針;

      ·參數lpdwDispition指明鍵是被創建還是被打開的,可以是下面的一些數值:  REG_CREATE_NEW_KEY 表示鍵先前不存在,現在被創建;REG_OPENED_EXISTING_KEY 表示鍵先前已存在,現在被打開。

      如果該函數調用成功,則返回ERROR_SUCCESS。否則,返回值為文件WINERROR.h中定義的一個非零的錯誤代碼,可以通過設置 FORMAT_MESSAGE_FROM_SYSTEM標識調用FormatMessage()函數來獲取一個對錯誤的總體描述。

      3、RegOpenKeyEx()

      原型:LONG RegOpenKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions,
    REGSAM samDesired, PHKEY phkResult );

      解釋:打開一個指定的鍵,并返回打開鍵的句柄。

      各參數及返回值的含義如下:

      ·參數hKey的含義同RegCreateKeyEx函數中的hKey參數;

      ·參數lpSubKey為一個指向以零結尾的字符串的指針,其中包含子鍵的名稱,可以利用反斜線(\)分隔不同的子鍵名。如果字符串為空,則根據hKey參數創建一個新的句柄。在這種情況下,并不關閉先前打開的句柄;

      ·參數ulOption保留,通常必須設置為0;

      ·參數samDesired的含義同RegCreateKeyEx函數中的samDesired參數;

      ·參數phkResult為一個指針,用來指向打開的鍵的句柄。可以通過RegCloseKey函數關閉這個句柄;

      ·函數的返回值同RegCreateKeyEx函數的返回值。

      4、 查詢某一個鍵值:RegQueryValueEx()

      原型:LONG RegQueryValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD pReserved, LPDWORD lpType,
    LPBYTE lpData, LPDWORD lpcbData );

      解釋:根據要查詢的鍵的句柄,要返回的查詢的數據。

      各個參數及返回值的含義如下:

      ·參數hKey為當前的一個打開的鍵的句柄,具體數值同RegCreateKeyEx函數的hKey參數;

      ·參數lpVauleName為一個指向非空的包含查詢值的名稱的字符串指針;

      ·參數lpReserved保留,必須為NULL;

      ·參數lpType為一個指向數據類型的指針,數據類型為下列類型之一:REG_BINARY 二進制數據、REG_DWORD 32位整數、REG_DWORD_LITTLE_ENDIAN little-endian格式的數據,例如0X12345678以(0X78 0X56 0X34 0X12)方式保存、REG_DWORD_BIG_ENDIAN big-endian格式的數據,例如0X12345678以(0X12 0X34 0X56 0X78)方式保存、REG_EXPAND_SZ 一個包含未擴展環境變量的字符串、REG_LINK 一個Unicode類型的鏈接、REG_MULIT_SZ 以兩個零結尾的字符串、REG_NONE 無類型數值、REG_RESOURCE_LIST 設備驅動資源列表、REG_SZ 一個以零結尾的字符串根據函數使用的字符集類型的不同而設置為Unicode或ANSI類型的字符串;

      ·參數lpData為一個指向保存返回值的變量的指針。如果不需要返回值,該參數可以為NULL;

      ·參數lpcbData為一個指向保存返回值長度的變量的指針。其中長度以字節為單位。如果數據類型為REG_SZ、REG_MULTI_SZ或 REG_EXPAND_SZ,那么長度也包括結尾的零字符,只有在參數lpData為NULL時,參數lpcbData才可以為NULL;返回值同 RegCreateKeyEx函數的返回值;

      5、RegSetValueEx()

      原型:LONG RegSetValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD lpReserved, DWORD dwType,
    const BYTE *lpData, DWORD cbData);

      解釋:設置注冊表中的一個鍵值。

      各個參數及返回值的含義如下:

      ·參數hKey的含義同RegCreateKeyEx函數中的hKey參數;

      ·參數lpValueName為一個指向包含值名的字符串指針;Reserved保留,通常必須設置為0;

      ·參數dwType確定了設置的值的類型同RegQueryValueKeyEx的lyType參數;

      ·參數lpData為一個指向包含數據的緩沖區的指針;

      ·參數cbData以字節為單位,指定數據的長度;

      返回值同RegCreateKeyEx函數的返回值。

      6、RegDeketeKey()

      原型:LONG RegDeleteKey(HKEY hKey,LPCTSTR lpSubKEY);

      解釋:函數RegDeketeKey刪除一個鍵及所有的子鍵。

      各個參數及返回值的含義如下:

      ·參數hKey的含義同RegCreateKeyEx函數中的hKey參數;

      ·參數lpSubKey的含義同RegCreateKeyEx函數中的lpSubKey參數。  

    posted on 2009-03-26 23:59 聽風 閱讀(229) 評論(0)  編輯  收藏 所屬分類: C++

    主站蜘蛛池模板: 国产亚洲无线码一区二区| 日韩午夜理论免费TV影院| 久久久久亚洲精品天堂久久久久久 | 国产嫩草影院精品免费网址| 亚洲国产精品综合一区在线| 69视频在线观看高清免费| 久久精品国产亚洲av麻豆色欲| 免费国产黄网站在线观看视频| 无码欧精品亚洲日韩一区| 91视频免费网址| 亚洲国产成人精品无码区在线秒播| 亚洲无砖砖区免费| 亚洲色图激情文学| 日日AV拍夜夜添久久免费| 特级毛片A级毛片免费播放| 亚洲中文字幕不卡无码| 99久久免费观看| 亚洲伊人久久大香线蕉结合| 在线成人a毛片免费播放| 深夜a级毛片免费无码| 亚洲愉拍99热成人精品热久久 | 亚洲AV第一成肉网| 中国性猛交xxxxx免费看| 亚洲成AV人片在线观看WWW| 国产亚洲婷婷香蕉久久精品| 国产黄色免费观看| 亚洲日本一区二区三区| 国产va精品免费观看| 曰批免费视频播放在线看片二| 国产国拍精品亚洲AV片| 16女性下面无遮挡免费| 亚洲日韩国产欧美一区二区三区| 在线日韩av永久免费观看| 亚洲免费日韩无码系列| 亚洲av极品无码专区在线观看| 国产小视频在线观看免费| 99精品视频免费在线观看| 久久人午夜亚洲精品无码区| 亚洲欧洲日产国码无码网站| 福利免费观看午夜体检区| 本免费AV无码专区一区|