用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 |