IWshRuntimeLibrary是Windows Script Host(WSH)的类型库。可以用下列代码去读写注册表健。set WshShell = CreateObject ("WScript.Shell")WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"bKey = WshShell.RegRead ("HKCU\Software\ACME\FortuneTeller\")Msgbox (WshShell.RegRead ("HKCU\Software\ACME\FortuneTeller\MindReader"))WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
WshShell.RegDelete "HKCU\Software\ACME\"
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"bKey = WshShell.RegRead ("HKCU\Software\ACME\FortuneTeller\")Msgbox (WshShell.RegRead ("HKCU\Software\ACME\FortuneTeller\MindReader"))WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
WshShell.RegDelete "HKCU\Software\ACME\"
GetSetting 函数 检索注册表设置值。
SaveSetting 语句 保存或创建注册表设置值。
GetAllSettings 函数 返回一个包含多项注册表设置值的数组。
DeleteSetting 语句 删除注册表设置值。
但是他只访问固定的注册表位置
---HKEY_CURRENT_USER\Software\VB and VBA Program Settings\appname\section\key
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Option Explicit
'***********************************************************************************************
'* 本程序为访问注册表的工具DLL,其不同于SAVESETTING等函数,它可以访问注册表中的SOFTWARE KEY,
'* 在此主键下创建公司名KEY,软件KEY,然后在下设SECTION ,KEY。而不再将健值存放在 VB and VBA
'* Program Settings 中。
'* 如果原来用的是 VB 的 SaveSetting 系列,则亦很容易转换:
'* 将本程序编译,并引用本REGMASTR.DLL
'* 用替换的方法对代码进行下列替换:
'* SaveSetting 替换为: SaveRegSetting
'* GetSetting 替换为: GetRegSetting
'* DeleteSetting 替换为: DeleteRegSetting
'* 因而,本DLL为VB添加了三条语句和函数。
'* NOTE:编译前,请将公司名常量 sCompanyName 改为您的公司名
'* DeleteRegSetting 只可删除Key,若需删除SECTION,APPNAME,COMPANY,则需修改以下程序。
'**********************************************************************************************Const sCompanyName = "Solou"
Private mvarstrErr As String 'local copy'***************************************************************
'---------------------------------------------------------------
'***************************************************************
'---------------------------------------------------------------'类名属性,返回当前类的名称,用于出错时指明是何处出错
'保存这一属性值的本地变量
Private Const mvarClsName As String = "CLSREG"'此属性只有Get即为只读属性,所以,请不要给这一属性赋值
Public Property Get ClsName() As String
ClsName = mvarClsName
End Property
Public Function SaveRegSetting(AppName As String, Section As String, Key As String, Optional Setting As Variant) As IntegerDim hSoftware As Long
Dim lResult As Long
Dim hCompany As Long
Dim hAppName As Long
Dim hSection As Long
Dim SA As SECURITY_ATTRIBUTES
Dim Create As Long
Dim szBuffer As String
Dim lBufsize As LongOn Error GoTo ErrHandle'在 HKEY_CURRENT_UAER 下打开 Software Key
lResult = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, hSoftware)'在 SOFTWARE 下创建 COMPANYNAME KEY(若已存在,则打开它!)
lResult = RegCreateKeyEx(hSoftware, sCompanyName, 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, SA, hCompany, Create)'在 CompanyName 下创建 AppName KEY(若已存在,则打开它!)
lResult = RegCreateKeyEx(hCompany, AppName, 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, SA, hAppName, Create)'在 AppName 下创建 Section KEY(若已存在,则打开它!)
lResult = RegCreateKeyEx(hAppName, Section, 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, SA, hSection, Create)'读取新的键值
szBuffer = CStr(Setting)If Len(szBuffer) = 0 Then
szBuffer = " "
End IflBufsize = Len(szBuffer) + 1'保存新的健值
lResult = RegSetValueEx(hSection, Key, 0, REG_SZ, ByVal szBuffer, lBufsize)
'关闭 Software 各键
RegCloseKey hSection
RegCloseKey hAppName
RegCloseKey hCompany
RegCloseKey hSoftware
SaveRegSetting = -1Exit Function
ErrHandle:WriteErrLog Me, "SaveRegSetting", 69, "注册表读写错误,错误号:" & CStr(Err)
Err.Clear
SaveRegSetting = 0
End Function
Public Function GetRegSetting(AppName As String, Section As String, Key As String, Optional Default As Variant) As VariantDim hSoftware As Long
Dim lResult As Long
Dim hCompany As Long
Dim hAppName As Long
Dim hSection As Long
Dim SA As SECURITY_ATTRIBUTES
Dim Create As Long
Dim szBuffer As String
Dim lBufsize As LongOn Error GoTo ErrHandle'在 HKEY_CURRENT_UAER 下打开 Software Key
lResult = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, hSoftware)'在 SOFTWARE 下创建 COMPANYNAME KEY(若已存在,则打开它!)
lResult = RegCreateKeyEx(hSoftware, sCompanyName, 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, SA, hCompany, Create)'在 CompanyName 下创建 AppName KEY(若已存在,则打开它!)
lResult = RegCreateKeyEx(hCompany, AppName, 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, SA, hAppName, Create)'在 AppName 下创建 Section KEY(若已存在,则打开它!)
lResult = RegCreateKeyEx(hAppName, Section, 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, SA, hSection, Create)'查找上次保存的键值字符串的长度
lResult = RegQueryValueEx(hSection, Key, 0, REG_SZ, 0, lBufsize)'给定bufferszBuffer = Space(lBufsize + 1)'查找上次保存的键值
lResult = RegQueryValueEx(hSection, Key, 0, REG_SZ, ByVal szBuffer, lBufsize)'如果lResult=2 则不存在上次保存
If lResult = 2 Then
'如果Default不为空
If Len(Default) <> 0 Then
szBuffer = CStr(Default)
Else
szBuffer = vbNullString
End If
Else
szBuffer = Left$(szBuffer, lBufsize - 1)
End If'关闭 Software 各键
RegCloseKey hSection
RegCloseKey hAppName
RegCloseKey hCompany
RegCloseKey hSoftware'函数返回值:GetRegSetting = szBufferExit Function
ErrHandle:WriteErrLog Me, "GetRegSetting", 140, "注册表读写错误,错误号:" & CStr(Err)
Err.Clear
End FunctionPublic Function DeleteRegSetting(AppName As String, Section As String, Key As String) As Integer
Dim hSoftware As Long
Dim lResult As Long
Dim hCompany As Long
Dim hAppName As Long
Dim hSection As Long
Dim SA As SECURITY_ATTRIBUTES
Dim Create As Long
Dim szBuffer As String
Dim lBufsize As LongOn Error GoTo ErrHandle'在 HKEY_CURRENT_UAER 下打开 Software Key
lResult = RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, hSoftware)'在 SOFTWARE 下打开 COMPANYNAME KEY
lResult = RegCreateKeyEx(hSoftware, sCompanyName, 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, SA, hCompany, Create)
If (lResult = ERROR_SUCCESS) Then
'在 CompanyName 下打开 AppName KEY
lResult = RegCreateKeyEx(hCompany, AppName, 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, SA, hAppName, Create) If (lResult = ERROR_SUCCESS) Then
'在 AppName 下打开 Section KEY
lResult = RegCreateKeyEx(hAppName, Section, 0, "", REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS, SA, hSection, Create)
RegDeleteValue hSection, Key
End If
End If'关闭 Software 各键'如果要删除hSection,请用: RegDeleteKey hAppName, hSection'但需先确定hSection下无任何键值,否则,删除不掉!
RegCloseKey hSection
RegCloseKey hAppName
RegCloseKey hCompany
RegCloseKey hSoftwareDeleteRegSetting = -1Exit Function
ErrHandle:WriteErrLog Me, "DeleteRegSetting", 198, "注册表读写错误,错误号:" & CStr(Err)
Err.Clear
DeleteRegSetting = 0End FunctionPublic Property Let StrErr(ByVal vData As String)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.strErr = 5
mvarstrErr = vData
End Property
Public Property Get StrErr() As String
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.strErr
StrErr = mvarstrErr
End Property
请教
请教如果得到当前WINDOWS所用桌面画的文件名和目录呢?