亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

讀取和修改Windows注冊表

2019-11-18 17:52:17
字體:
來源:轉載
供稿:網友
使用VisualBasic讀取和修改Windows注冊表

  在過去,VisualBasic應用程序的開發者們對于如何在兩次應用程序的運行之間保留狀態信息感到非常的困難。這是因為基于MicrosoftWindows的應用程序(包括VisualBasic)需要將應用程序的狀態信息寫入到一個文本文件(*.INI文件)中,且需要經常對這些文件中的文本進行分析,以包含有用的狀態信息。

  現在,隨著Windows95以及WindowsNT這類32位操作系統的到來,應用程序可以通過使用一個叫做Windows注冊表的存儲場所來保留應用程序的狀態信息,并且將它們自己注冊在系統之中。通過位于ADVAPI32.DLL中的C語言應用程序編程接口(APIs),對注冊庫的提取和修改變得非常容易。這對于使用C和C 的程序員來說真是太好了,不過對于那些使用其它編程語言,例如VisualBasic的程序員來說,使用這些編程接口還需要進行許多額外的工作。

  作為一個VB程序員,你首先必須在一個*.BAS文件中定義注冊庫函數的原形,這些函數原形必須同存儲在ADVAPI32.DLL中的所需要的注冊庫APIs相兼容。你還需要添加那些對調用這些APIs所需要的結構和常量的聲明。這些對函數原形,結構以及常量的聲明全部包含在VBREG.BAS文件中,該文件是VBREG,本文的配套樣例代碼的一部份。要在任何32位的VB工程中使用這些注冊庫APIs,只需要簡單地將VBREG.BAS文件包含在工程中。

  注意:如果你決定在VBREG.BAS文件中添加額外的APIs,結構或常量,在對它們進行聲明的時候需要格外小心(特別是這些函數的參數)。要想這些在你的VisualBasic代碼中被調用的APIs按照你所預想的工作,正確聲明這些函數的參數是異常重要的。許多這類聲明的例子可以在WIN32API.TXT文件中找到,該文件作為VisualBasic系統的一部份同時被安裝,但是你可能需要對這些聲明進行修改,以便使它們能夠正常工作。你還可以在WINNT.H文件中找到額外的一些有用的注冊庫常量,在WINERROR.H文件中找到額外的一些有用的錯誤常量,這些文件隨著VisualC 一起被安裝。

  一旦你將一個文件,例如VBREG.BAS包括在你的工程中,你就可以在你的VB代碼中調用這些注冊庫APIs。要記住的是你所轉遞的參數必須有效且包含有效的值。另外,當STRING值被返回時,必須為此字符串創建一個空間來容納它。這些APIs,結構以及常量在VBREG樣例應用程序中都有說明。

  Windows注冊表通過四個主要注冊關鍵字來組織:HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HEKY_LOCAL_MACHINE,以及HKEY_USERS。在本文中假設你對于這些關鍵字已經非常熟悉,已經知道如何使用子關鍵字,以及已經了解在注冊庫中所包含的值的類型。子關鍵字可以用“HighestSubkey/NextLevelSubkey/LowerLevelSubkey/”(不包括引號)的形式來表示。其中“HighestSubkey”是最高級的子關鍵字,它直接位于四個主關鍵字之下。

  注冊關鍵字可以被創建,刪除,打開,關閉。正如你可能所想到的,一個注冊關鍵字在能夠使用之前需要首先創建它,在對一個注冊關鍵字進行修改之前必須要首先打開它。在應用程序執行期間,你應該關閉所有的當前未被使用的關鍵字,并且你應該僅僅只刪除那些你能確定將來絕對不會再使用的關鍵字。

  注冊值可以被創建,查詢,修改以及刪除。一個值在它能夠被查?之前必須已經被創建或是修改(通過使用RegSetValueEx來完成)。同注冊關鍵字一樣,如果你想刪除它,你需要確定它將來絕對不會再被使用。

  另外,注冊關鍵字和值可以被枚舉,以助你決定當前的那些輸入是可以使用的。如果你在編譯期間不能夠確定對哪些關鍵字或值感興趣,枚舉功能就非常有用了。

  有一點很有趣的注意事項是RegDeleteKeyAPI在沒有子關鍵字的情況下將只刪除注冊關鍵字。由于這個原因,VBREG不允許刪除一個帶有子關鍵字的關鍵字。不過你能夠很容易的添加刪除關鍵字以及子關鍵字的功能,你只需要創建一個過程,該過程枚舉你需要操作的關鍵字下的所有子關鍵字(以及這些子關鍵字的子關鍵字),并且在刪除該關鍵字之前首先刪除所有的子關鍵字。對于每個子關鍵字都應該在RegDeleteKey函數中檢查ERROR_access_DENIED標志,這樣的有效的遞歸進程能工作得很好。

  VBREG使用HKEY_LOCAL_MACHINE,在如下的VBREGForm_Load()過程中被設置:hKey=HKEY_LOCAL_MACHINE
  通過將此變量設置為其它的四個主注冊關鍵字之一,你能夠很容易的使用它們。更進一步,你能夠從用戶或是一個已知的注冊庫位置獲取這些信息。

  使用這些注冊表APIs,一個比較好的方法是檢查函數所返回的值以確定函數的調用是否成功(如果函數調用成功,它將會返回ERROR_SUCCESS標志)。如果不成功,你還可以檢查錯誤值,基于錯誤發生的類型,你可以決定你的應用程序接下來該怎么做。還有一個比較好的方法是使用注冊表APIs(例如在VBREG樣例中的CreateRegKey函數)來為錯誤設置陷井,以決定你的應用程序在錯誤發生后的行為。

  VBREG創建和修改的值都是REG_SZ類型(Unicode空結束字符串)的值。這里還有幾種其它類型的值可以在注冊庫中使用,例如REG_BINARY,REG_LINK,以及REG_DWord。例如,要寫一個REG_DWORD類型來替換REG_SZ類型,則SetRegValue過程的RegSetValueEx調用應該被改為:
lResult=RegSetValueEx(phkResult,sSetValue,0,REG_DWORD,CInt(sValue),4&)
  這里假設該“sValue”包含一個可以被轉化為一個整數的值。你可能會需要在代碼中進行更深入的修改以使用這些其它類型的值。

  在你能夠使用一個注冊庫關鍵字之前,該關鍵字必須被創建。RegCreateKeyExAPI提供了運行時刻的這個功能。如果關鍵字不存在,則RegCreateKeyEx將創建一個新的關鍵字,而如果關鍵字已經存在,則將只簡單地將它打開。下面是在VBREG的CreateRegKey過程中對RegCreateKeyEx的調用。

CreateRegKey=(RegCreateKeyEx(hKey,SubKey&NewSubKey,0,"",_REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,_SA,phkResult,Create)=ERROR_SUCCESS)

  如果RegCreateKeyEx函數返回了ERROR_SUCCESS標志,則你可以為REG_CREATED_NEW_KEY或REG_OPENED_EXISTING_KEY檢查Create參數,以確定是否有一個新的關鍵字被創建。在上面的調用中,REG_OPTION_NON_VOLATILE創建一個持久的關鍵字,KEY_ALL_ACCESS則給予所有的用戶對此關鍵字的完整的訪問權利。其它的選項也同樣能夠被指定。這些選項在VisualC 所帶的WindowsAPI參考中有更深入的解釋。

  一旦你有需要的注冊表關鍵字,你可以使用RegOpenKey或RegKeyCreateEx來在將來需要的時候打開它們。你可能會注意到在VBREG中在看上去應該使用RegOpenKey的地方使用了RegKeyCreateEx。我發現如果不使用RegKeyCreateEx來打開此關鍵字,則有一些操作將會返回ERROR_ACCESS_DENIED標志。這可能會構成額外的開支;如果該關鍵字不存在的話它將會真正地創建此關鍵字。如果這不是你所需要的,你應該試著在調用RegCreateKeyEx之前首先調用RegOpenKey,然后看看它的調用是否成功。

  一旦一個關鍵字被打開,你可以使用RegSetValueEx來設置它的值,如果需要的話,你也可以創建它。如果一個值還不存在,而你又不想創建它,你應該在調用RegSetValueEx之前首先調用RegQueryValueEx,然后測試它的返回值是不是ERROR_SUCCESS。下面是在VBREG的SetRegValue過程中對RegSetValueEx的調用:

lResult=RegSetValueEx(phkResult,sSetValue,0,REG_SZ,sValue,_CLng(Len(sValue) 1))

  在上面的調用中,REG_SZ是被寫入的值的類型。正如在前面所提到過的,如果你正確轉遞參數,你也可以寫入其它類型的值。
  你還可以通過使用RegQueryValueEx來在注冊庫中查詢一個存在的值。如果此函數調用成功,它將會返回ERROR_SUCCESS標志。下面是VBREG的GetRetValue過程中的代碼段:

'Creatthebuffer.
 szBuffer=Space(255)
 lBuffSize=Len(szBuffer)
'Openthekey.
 RegOpenKeyEx(hKey,lpszSubKey,0,1,phkResult)
'Querythevalue
 lResult=RegQueryValueEx(phkResult,szKey,0,0,szBuffer,lBuffSize)

  在這里需要注意的最為重要的事情是要為緩沖創建足夠的空間。使用C語言APIs返回一個STRING值作為一個輸出(out)參數(例如RegQueryValueEx的第5個參數),你必須顯式地為此參數定義一個空間。如果這項操作失敗,將會導致產生一個不可預料的結果值。

  這篇文章意圖告訴你在VisualBasic4.0應用程序中如何使用Windows注冊表APIs。如果你希望看到更多的有關Windows注冊表或注冊表APIs的信息,請參考VisualC 所帶的WindowsAPI參考,以及在Microsoft開發庫(MicrosoftDevelopmentLibrary)中有關的文字。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品露脸自拍| 成人久久久久久久| 日韩视频精品在线| 日本一区二区三区四区视频| www.久久撸.com| 91在线免费视频| 成人h视频在线观看播放| 91av成人在线| 日韩av电影中文字幕| 亚洲欧美日韩久久久久久| 久久99青青精品免费观看| 欧美老少配视频| 日韩电影中文字幕| 九九精品在线观看| 欧美精品在线播放| 日韩在线观看成人| 精品国产一区二区三区久久狼黑人| 欧美中文字幕第一页| 欧美日韩中国免费专区在线看| 亚洲裸体xxxx| 中文字幕亚洲图片| 日本中文字幕成人| 亚洲精品www久久久久久广东| 精品女同一区二区三区在线播放| 国产成人中文字幕| 91亚洲国产成人久久精品网站| 欧美成人免费一级人片100| 国产69久久精品成人| 亚洲性猛交xxxxwww| 国产亚洲精品久久久| 亚洲天堂第一页| 黑人巨大精品欧美一区二区一视频| 欧美老少做受xxxx高潮| 久久精品这里热有精品| www.xxxx精品| 欧美性jizz18性欧美| 国产主播喷水一区二区| 国产日本欧美一区二区三区| 一本一本久久a久久精品牛牛影视| 精品成人在线视频| 国产精品久久久久91| 黑人巨大精品欧美一区二区免费| 亚洲综合小说区| 国产精品视频免费在线| 日韩av片永久免费网站| 亚洲精品一区二区久| 亚洲片在线资源| 国产精品久久久久久久久久三级| 欧美日韩亚洲天堂| 国模极品一区二区三区| 欧美成人午夜免费视在线看片| 在线观看精品国产视频| 欧美性理论片在线观看片免费| 久久国产精品久久久久久| 91福利视频在线观看| 久久精品99久久久久久久久| 亚洲欧美一区二区激情| 欧美性生交xxxxxdddd| 国产精品久久一| 国产原创欧美精品| 91在线观看免费网站| 国产亚洲精品一区二555| 98精品国产高清在线xxxx天堂| 亚洲xxx自由成熟| 亚洲人成伊人成综合网久久久| www国产91| 日韩中文字幕在线| 国产欧美日韩亚洲精品| 久久久久久国产| 欧美国产一区二区三区| 98精品在线视频| 久久精品久久久久| 久久视频国产精品免费视频在线| 国产在线观看精品| 亚洲美女av网站| 国产精品大陆在线观看| 亚洲日韩中文字幕在线播放| 91tv亚洲精品香蕉国产一区7ujn| 国产精品99久久久久久久久久久久| 综合激情国产一区| 久久久久久久网站| 欧美极品美女视频网站在线观看免费| 国产亚洲精品久久| 国产精品美乳在线观看| 日韩资源在线观看| 亚洲激情中文字幕| 精品久久久中文| 日韩在线视频播放| 国产欧美精品一区二区三区介绍| 欧美丰满老妇厨房牲生活| 在线观看亚洲区| 538国产精品一区二区在线| 久久人人爽人人爽人人片av高请| 国产婷婷97碰碰久久人人蜜臀| 在线免费看av不卡| 91禁外国网站| 精品国产成人在线| 久久久999国产| 日本伊人精品一区二区三区介绍| 一区二区三区 在线观看视| 国产免费一区二区三区在线能观看| 色香阁99久久精品久久久| 久久精品久久久久| 亚州国产精品久久久| 日韩中文在线不卡| 国产精品成人一区| 国产精品都在这里| 亚洲午夜久久久久久久| 国内自拍欧美激情| 2019中文字幕在线| 宅男66日本亚洲欧美视频| 91久久久国产精品| 日韩中文字幕在线免费观看| 国产成人综合亚洲| 在线播放日韩精品| 91国内免费在线视频| 中文字幕日韩视频| 久久99视频免费| 日本欧美爱爱爱| 日韩在线观看网站| 欧美巨乳美女视频| 国产精品久久久久9999| 精品高清美女精品国产区| 亚洲国产天堂久久国产91| 久久久视频免费观看| 深夜福利亚洲导航| 国产精品美女999| 久久成人精品一区二区三区| 国产精品视频999| 92福利视频午夜1000合集在线观看| 久久久久久91香蕉国产| 久久av在线看| 国产精品成人久久久久| 韩国三级日本三级少妇99| 国产一区在线播放| 欧亚精品在线观看| 成人有码在线播放| 精品欧美一区二区三区| 日韩在线资源网| 九九热这里只有精品免费看| 欧美一区二区三区艳史| 亚洲综合第一页| 欧美自拍视频在线观看| 国产欧美精品一区二区三区介绍| 成人精品aaaa网站| 中文字幕日韩精品在线| 日日狠狠久久偷偷四色综合免费| 久久亚洲欧美日韩精品专区| 国产一区香蕉久久| 亚洲精品视频网上网址在线观看| 欧美日韩激情小视频| 在线观看精品国产视频| 久久久精品一区二区| 午夜精品99久久免费| 亚洲国产精品yw在线观看| 午夜欧美不卡精品aaaaa| 国产精品黄色影片导航在线观看| 欧美色视频日本版| 日本久久久久亚洲中字幕| 九九精品在线观看| 成人免费淫片aa视频免费| 欧美精品videossex88| 乱亲女秽乱长久久久| 欧洲美女免费图片一区|