• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    VB通過API訪問Windows注冊表

    發布: 2007-5-25 09:19 | 作者: iamfancy | 來源: 互聯網 | 查看: 34次 | 進入軟件測試論壇討論

    領測軟件測試網 你希望你的程序能訪問 Windows 注冊表嗎?當然,能訪問龐大的 Windows 注冊表是每個程序設計者都希望的事情,那么我就告訴你如何通過API函數訪問 Windows 注冊表吧。請先看看下面的 Visual Basic 程序:

      '根鍵常數
      Const HKEY_CLASSES_ROOT = -2147483648#
      Const HKEY_CURRENT_USER = -2147483647#
      Const HKEY_LOCAL_MACHINE = -2147483646#
      Const HKEY_USERS = -2147483645#

      '鍵值類型
      Const REG_SZ = 1& '字符串值
      Const REG_BINARY = 3& '二進制值
      Const REG_DWORD = 4& 'DWORD 值

      '聲明有關API函數
      Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
        ( _
         ByVal hKey As Long, _
         ByVal lpSubKey As String, _
         ByRef phkResult As Long _
         ) As Long '建立一個新的主鍵

      Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
        ( _
         ByVal hKey As Long, _
         ByVal lpSubKey As String, _
         ByRef phkResult As Long _
        ) As Long '打開一個主鍵

      Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
       ( _
        ByVal hKey As Long, _
        ByVal lpSubKey As String _
       ) As Long '刪除一個主鍵

      Private Declare Function RegCloseKey Lib "advapi32.dll" _
       ( _
        ByVal hKey As Long _
       ) As Long '關閉一個主鍵

      Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
       ( _
        ByVal hKey As Long, _
        ByVal lpValueName As String, _
        ByVal Reserved As Long, _
        ByVal dwType As Long, _
        ByVal lpData As Any, _
        ByVal cbData As Long _
       ) As Long '創建或改變一個鍵值,lpData應由缺省的ByRef型改為ByVal型

      Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
       ( _
        ByVal hKey As Long, _
        ByVal lpValueName As String, _
        ByVal lpReserved As Long, _
        ByRef lpType As Long, _
        ByVal lpData As Any, _
        ByRef lpcbData As Long _
       ) As Long '查詢一個鍵值,lpData應由缺省的ByRef型改為ByVal型

      Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" _
       ( _
        ByVal hKey As Long, _
        ByVal lpValueName As String _
        ) As Long '刪除一個鍵值

      '主過程
      Sub Main()
       Dim nKeyHandle As Long, nValueType As Long, nLength As Long
       Dim sValue As String
       sValue = "I am a winner!"
       Call RegCreateKey(HKEY_CURRENT_USER, "New Registry Key", nKeyHandle)
       Call RegSetValueEx(nKeyHandle, "My Value", 0, REG_SZ, sValue, 255)
       sValue = Space(255)
       nLength = 255
       Call RegQueryValueEx(nKeyHandle, "My Value", 0, nValueType, sValue, nLength)
       MsgBox sValue
       Call RegDeleteValue(nKeyHandle, "My Value")
       Call RegDeleteKey(HKEY_CURRENT_USER, "New Registry Key")
       Call RegCloseKey(nKeyHandle)
      End Sub

      來看看程序運行的結果:

      在注冊表的 HKEY_CURRENT_USER 根鍵中多了一個 New Registry Key 主鍵。其中除有一個空的“(默認)”值外,還有一個值為“I am a winner!”的“My Value”值
      下面我們來分析一下這個程序:

      首先是定義常量。前面四個常量是各根鍵的句柄,這些句柄都是固定的;后三個是鍵值類型,在注冊表編輯器中右鍵單擊主鍵彈出的“新建”菜單項中,可以看到這三個鍵值類型! 
      第二步是聲明API函數。這一步可以通過“API 文本瀏覽器”來完成:用“API 文本瀏覽器”加載文件“Win32Api.txt”,查找出上例中的 API 函數并添加到“選定項”一欄中,點取“復制”按鈕,再回到 VB 程序編輯環境,將剪貼板中的內容粘貼到VB程序編輯器中,這樣就完成了 API 函數的聲明過程。值得注意的是,“RegSetValueEx”和“ RegQueryValueEx”兩個函數中的“lpData”被定義為“Any”類型的,卻沒有定義傳遞方式,于是它被默認為“ByRef”傳遞方式。經筆者測試,這樣不能正確的設置或查詢鍵值,但將其傳遞方式改為“ByVal”后,便 OK 了! 

      第三步便是在訪問注冊表了!癛egOpenKey”的用法與“RegCreateKey”的用法是類似的,前者用于打開一個已存在的主鍵,而后者除了能用于打開一個已存在的主鍵外,如果該主鍵不存在,還能創建這個主鍵。打開或創建主鍵成功后將返回一個句柄給參數“phkResult”,這個句柄將在對鍵值的操作中用到,它就是“RegSetValueEx”、“RegQueryValueEx”和“RegDeleteValue”中的“nKeyHandle”參數! ∵有一點需要說明,每個主鍵中都有一個鍵值名顯示為“(默認)”,但其鍵值名并不就是“(默認)”,而是一個空字符串。

      現在,你知道怎樣通過API函數訪問Windows注冊表了嗎?

    -=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=-
                 /\
      __________/LB\___   OUTINN
     /  _[]_   /____\  \
    /_________/| () |\__\ http://outinn.yeah.net/
     |  ____ /-| __ |-\|  Welcome to visit OUTINN!
     |__|==|___| || |__|
     -=--=--=- |_||_| =-  Fancy, outinn@china.com

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>