top
Loading...
對注冊表進行編程的“捷徑”

我們知道,在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


按以上思路,我們可以很方便快捷地對注冊表進行增、刪、改等操作,是不是很簡單?


作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗