top
Loading...
用VisualBasic修改Windows98注冊表

Windows98系統注冊表中包含關于系統配置及運行的重要信息。本文以修改KEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun子鍵分支中的鍵值信息為例,介紹如何在Visual Basic中,利用Win32 API函數修改注冊表。

一、聲明Win32 API函數

因為Visual Basic 6.0本身沒有提供對系統注冊表中“鍵” 的創建、打開、關閉、刪除等操作的功能函數,所以,首先在程序的開始聲明以下Win32 API 函數:

Const REG_SZ=1
Global Const HKEY_LOCAL_MACHINE
=&H80000002
Declare Function RegOpenKey Lib“advapi32”
Alias “RegOpenKeyA”(ByVal hkey As Long,
ByVal lpszSubKey As String,phkResult As Long) As Long
’該函數用于打開系統注冊表中已存在的鍵。
函數的返回值:鍵打開成功返回0,否則返回非0,
phkResult被設置為該鍵的句柄。

Declare Function RegSetValueEx Lib “advapi32”
Alias “RegSetValueExA” (ByVal hkey As
Long,ByVal lpszValueName As String,ByVal
dwReserved As Long,ByVal fdwType As Long,
lpbData As Any,ByVal cbData As Long) As Long
’該函數用于向系統注冊表中指定的鍵添加鍵名和鍵值。
函數的返回值: 添加鍵名、鍵值成功返回0,否則返回非0。

Declare Function RegCloseKey Lib “advapi32”
Alias “RegCloseKey” (ByVal hkey As Long) As Long
’該函數用于關閉系統注冊表中打開的鍵。
函數的返回值:鍵關閉成功返回0,否則返回非0。


編寫功能函數

Function oRegOpenKey (ByVal hkey As Long, ByVal lpszSubKey As String,phkResult As Long) As Boolean
Dim lResult As Long
On Error GoTo 0 ’關閉錯誤陷阱
lResult=RegOpenKey(hkey,lpszSubKey,phkResult)
If lResult=0 Then
oRegOpenKey=True
Else oRegOpenKey=False
End If
End Function

Function RegSetStringValue(ByVal hkey
As Long,ByVal strValueName As String,
ByVal strData As String,Optional ByVal flog) As Boolean
Dim lResult As Long
On Error GoTo 0
lResult=RegSetValueEx(hkey,strValueName,
0&,REG_SZ,ByVal strData,LenB(StrConv(strData,
vbFromUicode))+1)
’StrConv是Visual Basic提供的函數,
返回按指定類型轉換的Variant(String)。
’vbFromUicode是Visual Basic的系統常數。


在上面程序中,StrConv(strData,vbFromUnicode)的作用是:根據系統的默認碼將字符串轉換成Unicode。

If lResult =0 Then
RegSetStringValue=True
Else RegSetStringValue=False
End If
End Function
在Clik事件中編寫下列代碼
Private sub Commandl_Clik()
Dim hkey As Long
Dim MyReturn As Long
MyReturn=oRegOpenkey(HKEY_LOCAL_MACHINE,
“SOFTWAREMicrosoftWindowsCurrentVersionRun”,hkey)
If hkey=0 Then
MsgBox “您要求打開的主鍵未創建,
或者您的輸入有誤,請仔細核對后再次運行本程序!”
Exit Sub
End If
MyReturn=RegSetStringValue(hkey,
“MyAcess”,“d:programfilesoffice97
officemymsaccess.exe”,False)
’如果flag丟失或為True,則該動作將
被記錄在日志文件中,并且,如果用戶選擇
刪除已安裝的應用程序,該值將被應用程序刪除。

If MyReturn Then
MsgBox “您的程序已成功添加到
Windows 98的啟動中,再次啟動Windows時
系統將自動運行您的程序!”,vbExclamation,“特別提示”
Else MsgBox “您的這段代碼中存在某種錯誤,
請認真檢查!”,vbExclamation,“特別提示”
End If
RegCloseKey(hkey)
End Sub

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