對注冊表進行編程的“捷徑”
我們知道,在VB中,可以用 SHELL 函數來執行一個可執行文件。而對注冊表的訪問可以方便地用 Regedit.exe 命令將它與一文本文件聯系進來。這樣一來,我們無需掌握高深的API函數,需編程對該文本文件進行處理即可。
首先,注冊表中各個主鍵和子鍵的鍵值,一般來說有以下幾種類型:
①REG_SZ(普通字符串)
②REG_EXPAND_SZ(可展開式字串)
③REG_BINARY(二進制)
④REG_DWORD(長整數型,即十六進制值)。
他們在導出的注冊表文件中的表示形式不盡相同。具體實例請參見后文。
其次,讓我們來熟悉一下Regedit命令的用法及有關參數:
REGEDIT filename1
REGEDIT /E filename3 [regpath1]
REGEDIT /D regpath2
filename1 指定將要輸入到注冊表中的文件。
/E filename3 指定注冊表的輸出文件名。
regpath1 指定將要輸出的注冊表的鍵名(缺省為輸出整個注冊表)
/D regpath2 指定將要刪除的注冊表的鍵名
其中導出或導入的文件為一文本文件。格式如下:(小括號內為注釋,……表示此處有省略)
REGEDIT4 (必須以此開頭,注意大小寫)
[HKEY_LOCAL_MACHINESoftware](每個子鍵與上一子鍵之間必須空一行,且子鍵用[]括起來)
@=""(@表示鍵值名為“默認”,鍵值為空串)
…… ……
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersion]
"InstallType"=hex:03,00 (表示鍵名為"InstallType",鍵值為REG_BINARY(即二進制)類型 03 00)
"DevicePath"="C:\WINDOWS\INF"
(鍵"DevicePath"是普通字符串,即 REG_SZ 類型。當字符串中含有路徑“”等特殊字符時,約定
用“\”代替“”,用“”和“"”來代替回車和 "字符)
…… ……
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionSetupSetupXCert]
"RG2CATDB Return"=dword:00000000(dword:表示該鍵值REG_DWORD(長整數型,即十六進制值)
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionMS-DOSOptionsSmartdrv]
…… ……
"Autoexec.Bat"="LoadHigh %WINDIR%\SmartDrv"(含有一對%的字符串是可展開式字串,即REG_EXPAND_SZ類型,此處%WINDIR%表示WINDOWS的工作目錄)
例如:可用以下代碼將指定的子鍵路徑[HKEY_LOCAL_MACHINESoftware]的默認值修改為字符串:“此處值已修改!”
| stt = "HKEY_LOCAL_MACHINE" a = Shell("regedit /e c:windowsempemp.txt " & stt) '導出要修改的注冊表分支 If a = 0 Then MsgBox "導出錯誤!": End '可能是子鍵名稱錯誤 regpath = "[" + stt + "]" Open "c:windowsempemp.txt" For Input As #1 Open "c:windowsempemp1.txt" For Output As #2 regwrite = flase '是否是要修改的行 Print #2, "REGEDIT4" '寫入文件頭,注意必須是大寫 Print #2, "" Do Line Input #1, aa$ b$ = aa$ If regwrite = True Then '說明此行是需要修改的行 b$ = "@=""默認值已修改!""" Print #2, b$ MsgBox "原來的值為:" & Mid$(aa$, 3) & "即將改為:" & Mid$(b$, 3), vbOKOnly, "注冊表變化" End If If aa$ = regpath Then Print #2, b$ regwrite = True '說明下一行為所要修改的行,以便下次循環時對b$進行修改 Else regwrite = flase '不是要修改的行 End If ' If Left(aa$, 2) <> "@=" And b$ = "@=""默認值已修改!""" Then Print #2, aa$ '如果子鍵[HKEY_LOCAL_MACHINESoftware]中原來未設置默 認值,此時相當于在文件#1處插入b$。 Loop Until EOF(1) Close a = Shell("regedit c:windowsempemp1.txt ") '將修改后的內容導入到注冊表中 If a = 0 Then MsgBox "修改失敗!": End |
按以上思路,我們可以很方便快捷地對注冊表進行增、刪、改等操作,是不是很簡單?