加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[VB.NET]读写注册表

发布时间:2020-12-16 23:57:24 所属栏目:大数据 来源:网络整理
导读:读写注册表 实例说明 在本实例中,我们将制作一个能读写注册表的程序。程序运行后,可以选择要添加、删除、修改或查询的键和键值。程序运行结果如图68-1所示。 图68-1 运行结果 技术要点 l 操纵注册表的API函数 l 添加、删除键和键值 l 查询键值 实现过程 ■
读写注册表

实例说明

在本实例中,我们将制作一个能读写注册表的程序。程序运行后,可以选择要添加、删除、修改或查询的键和键值。程序运行结果如图68-1所示。

图68-1 运行结果

技术要点

l 操纵注册表的API函数

l 添加、删除键和键值

l 查询键值

实现过程

■ 新建项目

打开Visual Studio.NET,选择"新建项目",在项目类型窗口中选择"Visual Basic项目",在模板窗口中选择"Windows应用程序",在名称域中输入"Rwregister",然后选择保存路径。单击"确认"。

■ 添加控件和模块

向当前窗体上添加两组Group控件,每组上有两个RadioButton选项按钮,将它们分别做成控件数组;四个Label控件,用作说明之用;一个ComboBox控件和三个TextBox控件,分别用于输入相应的子键、键名和键值;四个Button控件用于实现相应的功能。

■ 设置属性

将Label控件、Button按钮、RadioButton控件的Text属性设置为和界面一致。将TextBox控件的Text属性清空。

■ 添加代码

由于本实例使用的API函数和常数比较多,在此仅列出主要的声明部分。

' 这是在模块中添加的代码

Option Strict Off

Public Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (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 "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long,ByVal lpSubKey As String) As Long

Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long,ByVal lpValueName As String) As Long

Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long,phkResult As Long) As Long

Public Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long,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,KEY_ALL_ACCESS,hKey)

lRetVal = SetValueEx(hKey,sValueName,lValueType,vValueSetting)

RegCloseKey(hKey)

End Function

' 查询键值

Public Function QueryValue(ByRef lPredefinedKey As Integer,ByRef sValueName As String) As Object

Dim lRetVal As Integer

Dim hKey As Integer

Dim vValue As Object

lRetVal = RegOpenKeyEx(lPredefinedKey,hKey)

lRetVal = QueryValueEx(hKey,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,Nothing,REG_OPTION_NON_VOLATILE,SA,hNewKey,lRetVal)

RegCloseKey(hNewKey)

End Function

' 删除键值

Public Function DeleteValue(ByRef lPredefinedKey As Integer,ByRef sValueName As String) As Object

Dim lRetVal As Integer

Dim hKey As Integer

lRetVal = RegOpenKeyEx(lPredefinedKey,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,hKey)

lRetVal = RegDeleteKey(lPredefinedKey,sKeyName)

RegCloseKey(hKey)

End Function

' 下面这些代码是在窗体中的

' 添加键和键值

Private Sub cmdadd_Click(ByVal eventSender As System.Object,ByVal eventArgs As System.EventArgs) Handles cmdadd.Click

Dim resmainkey As Integer

mainkey = VB6.GetItemString(Combo1,Combo1.SelectedIndex)

resmainkey = ResultMainKey(mainkey)

' 判断操作的对象是键还是键值

If opttype(0).Checked Then

CreateNewKey(resmainkey,(Text1.Text))

Else

' 判断添加的是数值还是字符串

If numtype(0).Checked Then

SetKeyValue(resmainkey,(Text1.Text),(Text2.Text),(Text3.Text),REG_DWORD)

Else

SetKeyValue(resmainkey,REG_SZ)

End If

End If

End Sub

' 删除键和键值通过不同的函数来进行

Private Sub cmddelete_Click(ByVal eventSender As System.Object,ByVal eventArgs As System.EventArgs) Handles cmddelete.Click

Dim resmainkey As Integer

mainkey = VB6.GetItemString(Combo1,Combo1.SelectedIndex)

resmainkey = ResultMainKey(mainkey)

If opttype(0).Checked Then

DeleteKey(resmainkey,(Text1.Text))

Else

DeleteValue(resmainkey,(Text2.Text))

End If

End Sub

' 查询键值

Private Sub cmdquery_Click(ByVal eventSender As System.Object,ByVal eventArgs As System.EventArgs) Handles cmdquery.Click

Dim resmainkey As Integer

mainkey = VB6.GetItemString(Combo1,Combo1.SelectedIndex)

resmainkey = ResultMainKey(mainkey)

Text3.Text = QueryValue(resmainkey,(Text2.Text))

End Sub

' 程序启动时的代码

Private Sub Form1_Load(ByVal eventSender As System.Object,ByVal eventArgs As System.EventArgs) Handles MyBase.Load

With Combo1

.Items.Add("HKEY_CLASSES_ROOT")

.Items.Add("HKEY_CURRENT_USER")

.Items.Add("HKEY_LOCAL_MACHINE")

.Items.Add("HKEY_USERS")

.Items.Add("HKEY_CURRENT_CONFIG")

.Items.Add("HKEY_DYN_DATA")

.SelectedIndex = 0

End With

End Sub

■ 运行程序

单击菜单"调试|启动"或单击 图标运行程序。

小结

通过对本实例的学习,相信读者已经掌握了关于注册表的有关操作。读者可以使用注册表保存自己的设置,将本实例与其他实例结合,可以做出更优秀的程序出来。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读