分享
 
 
 

走近VB.Net(十二) 注册表快速入门

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

走近VB.Net(十二) 注册表快速入门

作者:hejianzhong VB.Net中文站(http://vbnetcn.126.com)

首先介绍一下注册表的相关基础知识:注册表的每一个文件夹被称为一个Key(项),这个文件夹的子文件夹被称为SubKey(子

项),而在一个子项中有不同的Value Name(值项—即数值顶),值项后面就是你要保存的数据Value Data(数据)了。而在子项中

通常都有一个Default Value 是默认的Value Name,相信打开过注册表的一定看得很清楚:

好了,我们现在看一下如何写入注册表。

最易的方法就是使用VB内置的函数了,这与VB6中使用的方法一模一样:

————————————————————————————————————————

设置Sub SaveSetting(AppName As String,Section As String,Key As String,Setting As String)

获取 Function GetSetting(AppName As String,Section As String,Key As String,[Default As String])

删除DeleteSetting(AppName As String,[Section As String=nothing],[Key As String=nothing] )

————————————————————————————————————————————————

不过他只能写在一个固定的位置,写入HKEY_CURRENT_USER//Software//VB and VBA Program Setting.当我们需要使

用注册表加密时,总不能写在这样一个大家都知道的地方吧?还有当我们要使用注册表实现一些功能时(如写入run主键让程序

启动时自运行)这个更是无能为力。相信大家都看过VB6的例程,很是复杂。不过我看的一个系列文章写得很好(在我的网站

---VB6知识库中有收录)竟有七八页。在VB.Net中就很简单了,跟上面真有些差不多。--------(不过我可是研究了很久的,很辛

苦---最近有人把我的文章改成自已的名字,我很伤心,也请这些人自重,再次声明在任何地方张贴必须经过我的同意,并明确

标明:“作者:hejianzhong VB.Net中文站 http:://vbnetcn.126.com.”的字样)

我在这里写了一个模块,只是为了示例,大家在使用的时候记住不需要像我这样另外使用模块(应该根据你的需要灵活运

用),这有些画蛇添足。这个我也不打算提供源码下载,因为实在太简单了。

首先如图添加控件:

textbox控件的text设为“”,其它的请作相应的修改,实际上这个示例你不编也可以,只要看懂下面的内容就行了:

写代码如下:

Imports System.ComponentModel

Imports System.Drawing

Imports System.WinForms

Public Class Form1

Inherits System.WinForms.Form

Public Sub New()

MyBase.New

Form1 = Me

'This call is required by the Win Form Designer.

InitializeComponent

'TODO: Add any initialization after the InitializeComponent() call

End Sub

'Form overrides dispose to clean up the component list.

Overrides Public Sub Dispose()

MyBase.Dispose

components.Dispose

End Sub

下面这些

#Region " Windows Form Designer generated code "

'Required by the Windows Form Designer

Private components As System.ComponentModel.Container

Private WithEvents Label2 As System.WinForms.Label

Private WithEvents Label1 As System.WinForms.Label

Private WithEvents TextBox2 As System.WinForms.TextBox

Private WithEvents Button4 As System.WinForms.Button

Private WithEvents Button3 As System.WinForms.Button

Private WithEvents TextBox1 As System.WinForms.TextBox

Private WithEvents Button1 As System.WinForms.Button

Private WithEvents RadioButton2 As System.WinForms.RadioButton

Private WithEvents RadioButton1 As System.WinForms.RadioButton

Dim WithEvents Form1 As System.WinForms.Form

'NOTE: The following procedure is required by the Windows Form Designer

'It can be modified using the Windows Form Designer.

'Do not modify it using the code editor.

Private Sub InitializeComponent()

Me.components = New System.ComponentModel.Container()

Me.TextBox1 = New System.WinForms.TextBox()

Me.TextBox2 = New System.WinForms.TextBox()

Me.Label2 = New System.WinForms.Label()

Me.Label1 = New System.WinForms.Label()

Me.Button4 = New System.WinForms.Button()

Me.RadioButton1 = New System.WinForms.RadioButton()

Me.Button3 = New System.WinForms.Button()

Me.Button1 = New System.WinForms.Button()

Me.RadioButton2 = New System.WinForms.RadioButton()

'@design Me.TrayHeight = 0

'@design Me.TrayLargeIcon = False

'@design Me.TrayAutoArrange = True

TextBox1.Location = New System.Drawing.Point(184, 80)

TextBox1.Multiline = True

TextBox1.TabIndex = 3

TextBox1.Size = New System.Drawing.Size(144, 24)

TextBox2.Location = New System.Drawing.Point(184, 128)

TextBox2.Multiline = True

TextBox2.TabIndex = 7

TextBox2.Size = New System.Drawing.Size(144, 24)

Label2.Location = New System.Drawing.Point(64, 192)

Label2.Text = "Label2"

Label2.Size = New System.Drawing.Size(264, 32)

Label2.TabIndex = 9

Label1.Location = New System.Drawing.Point(16, 184)

Label1.Text = "当前位置"

Label1.Size = New System.Drawing.Size(40, 32)

Label1.TabIndex = 8

Button4.Location = New System.Drawing.Point(8, 152)

Button4.Size = New System.Drawing.Size(168, 24)

Button4.TabIndex = 6

Button4.Text = "读取数据"

RadioButton1.Location = New System.Drawing.Point(8, 8)

RadioButton1.Text = "写入HKEY_CURRENT_USER "

RadioButton1.Size = New System.Drawing.Size(168, 24)

RadioButton1.TabIndex = 0

Button3.Location = New System.Drawing.Point(8, 112)

Button3.Size = New System.Drawing.Size(168, 24)

Button3.TabIndex = 5

Button3.Text = "写入数据"

Button1.Location = New System.Drawing.Point(8, 80)

Button1.Size = New System.Drawing.Size(168, 24)

Button1.TabIndex = 2

Button1.Text = "打开注册表子项(subkey)"

RadioButton2.Location = New System.Drawing.Point(8, 40)

RadioButton2.Text = "写入HKEY_LOCAL_MACHINE "

RadioButton2.Size = New System.Drawing.Size(168, 40)

RadioButton2.TabIndex = 1

Me.Text = "Form1"

Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)

Me.ClientSize = New System.Drawing.Size(336, 277)

Me.Controls.Add(Label2)

Me.Controls.Add(Label1)

Me.Controls.Add(TextBox2)

Me.Controls.Add(Button4)

Me.Controls.Add(Button3)

Me.Controls.Add(TextBox1)

Me.Controls.Add(Button1)

Me.Controls.Add(RadioButton2)

Me.Controls.Add(RadioButton1)

End Sub

#End Region

Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs)

textbox2.Text = getval("数值项").ToString

End Sub

Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs)

writeval("数值项", textbox2.Text) : textbox2.Text = "已写入到注册表"

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If objkey = Nothing Then

msgbox("请先在上面选定注册表根项")

Me.RadioButton1.Select()

OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser)

label2.Text = objkey.ToString

Exit Sub

End If

newsubkey(textbox1.Text)

label2.Text = objkey.ToString

End Sub

Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)

openbasekey(Microsoft.Win32.RegistryHive.LocalMachine)

label2.Text = objkey.ToString

End Sub

Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)

OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser)

label2.Text = objkey.ToString

End Sub

End Class

'##################################################################################################################

Public Module RWregKey

'定义一个objKey 的注册项对象

Public objKey As Microsoft.Win32.RegistryKey

'_________________________________________________________________________________________________________________

'使用openremotebasekey方法打开一个注册表根项目,使用rgistryhive获取一个最上层的Key 根项目

Public Sub OpenBaseKey(ByVal basekey As Microsoft.Win32.RegistryHive)

objkey = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(basekey, SystemInformation.ComputerName)

End Sub

'__________________________________________________________________________________________________

'使opensubkey打开一个指定的子项目,

Public Sub NextSubKey(ByVal keyname As String, ByVal writeable As Boolean)

objkey = objkey.OpenSubKey(keyname, writeable) '后面的布尔值(True,false)指定是否可读写 If objkey = keytemp Then

End Sub

'____________________________________________________________________________________________________________

'_______________________________________________________________________________________________________

'如果找不到就创造一个新的subkey子项目

Public Sub NewSubKey(ByVal keyname As String)

objkey = objKey.CreateSubKey(keyname) '在这里我们创造了一个新的subkey(项)

End Sub

'____________________________________________________________________________________________________________________

'写入需要保存的数据-------ValueData

Public Sub writeVal(ByVal valname As String, ByVal valdata As Object)

objkey.SetValue(valname, valdata) '写入数据----ValueData

End Sub

' ____________________________________________________________________

'读取保存的数据

Public Function getval(ByVal valname As String) As Object

Return objKey.GetValue(valname)

End Function

'_________ '删除一个注册表项

Public Sub delKey(ByVal keyname As String)

objkey.DeleteSubKey(keyname)

End Sub

'___________________________________________________________________________________________________________()

'____________________________________________________________________________________________________________________

'删除一个数据------ValueData

Public Sub delval(ByVal valname As String)

objkey.DeleteValue(valname) '删除了一个值

objkey.Close() '记住在使用过后把他关闭,这通常是被提倡的好习惯。

End Sub

End Module

大家看了是不是很简单,我曾在论坛看到人说,VB6用得很好我为什么要用VB.Net.而且Net只是Net技术,我们的这个……..不相关。这

真是天大的误解。就因为后面带了一个net,大家都不理解并疏远他,不论怎么样,VB.Net因为面向对象可以更有效率的写程序。大家为什么要拒绝呢?

我的系列文单出来以后,学VB.Net的人也增加了不少,我在网易论坛看到一个网友说为了装VB.Net装了一下午没装上,后来我告诉他到我的网站立马搞定了。

所以我并不反对张贴我的文章(我自已在讨论组宣传VB.Net又有打广告的嫌疑),可是你总要跟我打个招呼吧?我没有私心,一心为大家,可你们为什么要

把我的名字与网址隐藏起来呢?更有甚者,竟公然把文章作者换成自已的名字(在网易我的《VB.Net图解入门》《一步一步安装VB.Net》竟被改成"作者:大头鬼"

,---已被管理员删了!,)。看到这些,我的心里有点凉。前几天因为网速太慢,我通宵申请了一个高

速的网站,连夜上传所有资料,谁知上传又奇慢,两天,在网上呆了十几个小时。希望大家不要再这样的打击我了 ,这不是什么名利的问题,而是一个人起码的

尊严被杜渎了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有