VB读写注册表
古代名言-盐道街中学
VB读写注册表
今天,我们将制作一个能读写注册表的程序。程序运行后,可以选择要
添加、删除、
修改或查询的键和键值。程序运行结果如图所示。
运行结果
技术要点
操纵注册表的API函数
添加、删除键和键值
查询键值
实现过程
■
新建项目
打开Visual
,选择“新建项目”,在项目类型窗口中选择“Visual Basic项
目”,在模板窗口中选择“
Windows应用程序”,在名称域中输入“Rwregister”,然后选择
保存路径。单击“确
认”。
■
添加控件和模块
向当前窗体上添加两组Group控件,每组上有两个
RadioButton选项按钮,将它们分
别做成控件数组;四个Label控件,用作说明之用;一
个ComboBox控件和三个TextBox
控件,分别用于输入相应的子键、键名和键值;四个Bu
tton控件用于实现相应的功能。
■
设置属性
将Label控件、Butto
n按钮、RadioButton控件的Text属性设置为和界面一致。将TextBox
控件的Te
xt属性清空。
■
添加代码
由于本实例使用的API函数和常数比较多,在此仅列出主要的声明部分。
'
这是在模块中添加的代码
Option Strict Off
Public
Declare Function RegCreateKeyEx Lib
(ByVal
hKey As Long, ByVal lpSubKey As String, ByVal
Reserved As Long, ByVal
lpClass As String,
ByVal dwOptions As Long, ByVal samDesired As Long,
lpSecurityAttributes As SECURITY_ATTRIBUTES,
phkResult As Long,
lpdwDisposition As Long) As
Long
Public Declare Function RegDeleteKey Lib
(ByVal hKey As Long, ByVal lpSubKey As String)
As Long
Public Declare Function RegDeleteValue
Lib
(ByVal hKey As Long, ByVal lpValueName As
String) As Long
Public Declare Function
RegCloseKey Lib
Public Declare Function
RegOpenKey Lib
hKey As Long, ByVal lpSubKey As
String, phkResult As Long) As Long
Public
Declare Function RegSetValue Lib
hKey As Long,
ByVal lpSubKey As String, ByVal dwType As Long,
ByVal lpData As
String, ByVal cbData As Long)
As Long
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As
Long
bInheritHandle As Long
End Type
' 设置键值
Public Function SetKeyValue(ByRef
lPredefinedKey As Integer, ByRef sKeyName As
String, ByRef sValueName As String, ByRef
vValueSetting As Object, ByRef
lValueType As
Integer) As Object
Dim lRetVal As Integer
Dim hKey As Integer
lRetVal =
RegOpenKeyEx(lPredefinedKey, sKeyName, 0,
KEY_ALL_ACCESS,
hKey)
lRetVal =
SetValueEx(hKey, sValueName, lValueType,
vValueSetting)
RegCloseKey(hKey)
End
Function
' 查询键值
Public Function
QueryValue(ByRef lPredefinedKey As Integer, ByRef
sKeyName As
String, ByRef sValueName As
String) As Object
Dim lRetVal As Integer
Dim hKey As Integer
Dim vValue As
Object
lRetVal = RegOpenKeyEx(lPredefinedKey,
sKeyName, 0, KEY_ALL_ACCESS,
hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
QueryValue = vValue
RegCloseKey(hKey)
End Function
'
新建键
Public Function CreateNewKey(ByRef
lPredefinedKey As Integer, ByRef
sNewKeyName
As String) As Object
Dim hNewKey As
Integer
Dim lRetVal As Integer
Dim
SA As SECURITY_ATTRIBUTES
lRetVal =
RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0,
Nothing,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, SA, hNewKey, lRetVal)
RegCloseKey(hNewKey)
End Function
' 删除键值
Public Function DeleteValue(ByRef
lPredefinedKey As Integer, ByRef sKeyName As
String, ByRef sValueName As String) As Object
Dim lRetVal As Integer
Dim hKey As
Integer
lRetVal = RegOpenKeyEx(lPredefinedKey,
sKeyName, 0, KEY_ALL_ACCESS,
hKey)
lRetVal = RegDeleteValue(hKey, sValueName)
RegCloseKey(hKey)
End Function
'删除键
Public Function DeleteKey(ByRef lPredefinedKey
As Integer, ByRef sKeyName As
String) As
Object
Dim lRetVal As Integer
Dim
hKey As Integer
lRetVal =
RegOpenKeyEx(lPredefinedKey, sKeyName, 0,
KEY_ALL_ACCESS,
hKey)
lRetVal =
RegDeleteKey(lPredefinedKey, sKeyName)
RegCloseKey(hKey)
End Function
'
下面这些代码是在窗体中的
' 添加键和键值
Private Sub
cmdadd_Click(ByVal eventSender As , ByVal
eventArgs As
rgs) Handles
Dim resmainkey
As Integer
mainkey = mString(Combo1, edIndex)
resmainkey = ResultMainKey(mainkey)
'
判断操作的对象是键还是键值
If opttype(0).Checked Then
CreateNewKey(resmainkey, ())
Else
'
判断添加的是数值还是字符串
If numtype(0).Checked Then
SetKeyValue(resmainkey, (), (), (),
REG_DWORD)
Else
SetKeyValue(resmainkey, (), (), (),
REG_SZ)
End If
End If
End Sub
' 删除键和键值通过不同的函数来进行
Private Sub
cmddelete_Click(ByVal eventSender As , ByVal
eventArgs As
rgs) Handles
Dim resmainkey
As Integer
mainkey = mString(Combo1, edIndex)
resmainkey = ResultMainKey(mainkey)
If
opttype(0).Checked Then
DeleteKey(resmainkey, ())
Else
DeleteValue(resmainkey, (), ())
End If
End Sub
' 查询键值
Private Sub
cmdquery_Click(ByVal eventSender As , ByVal
eventArgs As
rgs) Handles
Dim resmainkey
As Integer
mainkey = mString(Combo1, edIndex)
resmainkey = ResultMainKey(mainkey)
=
QueryValue(resmainkey, (), ())
End Sub
'
程序启动时的代码
Private Sub Form1_Load(ByVal
eventSender As , ByVal eventArgs As
rgs)
Handles
With Combo1
.(
.(
.(
.(
.(
.(
.SelectedIndex = 0
End With
End Sub
■
运行程序
单击菜单“调试|启动”或单击
小结
图标运行程序。
通过对本实例的
学习,相信读者已经掌握了关于注册表的有关操作。读者可以使用注
册表保存自己的设置,将本实例与其
他实例结合,可以做出更优秀的程序出来