说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB用注册表保存数据(VB函数篇)

HTML文档下载 WORD文档下载 PDF文档下载
VB用注册表保存数据(VB函数篇)

作 者 : 扬眉



   简介

   注册表最开始是出现在Windows 3.x,是用来为OLE保存数据的。那时Windows和其应用程序的设置值大多都保存在各不相同的.INI文件中。例如我们最为熟悉的System.ini和Win.ini就是这样的文件。当软件越安越多,这种文件也越来越多,而且遍布硬盘的各个角落。既不便于管理,也浪费了很多磁盘空间(因为这些文件大多都很小)。

   当Windows 95推出的时候,注册表应运而生。所有的设置值,不论是系统的,还是应用程序的,都被保存在一个树型结构的数据库中。这样确实方便了不少,而且对多用户环境提供了更好的支持。而对程序员而言就麻烦了一些,必须了解的是注册表的结构,又因为注册表不再是单一的文本文件,所以必须用专门函数来操作注册表。

   注册表(Registry)是保存程序运行参数和用户设置的最佳地方。听过了太多的告诫,编辑注册表对很多人来说似乎是一件神秘而复杂的事,但在VB中,通过四个注册表函数,一切都变得简单起来。

   如果你对注册表有一些了解,那么应该知道注册表的结构和我们所熟悉的文件系统的结构是一样的,都是树型结构。用主键来代替目录以划分各种不同的信息。在主键下面还可以有子主键和三种不同类型的键值。每个键值可以是字符串,二进制值或者双字值中的一种。Visual Basic 提供了一个标准的注册位置(主键)以存储创建于 Visual Basic 的应用程序的程序信息:

   HKEY_CURRENT_USER\Software\VB and VBA Program Settings\

   下面的所有函数所读写的注册表路径都是以这个路径为根的相对位置。

   SaveSetting

   这个函数用来向注册表数据库写入一些数据

   SaveSetting appname, section, key, setting

   appname

   在向注册表写入数据之前,你必须计划好一个用在整个应用程序中的appname 。可以把注册表的内容比作一台计算机,那么appname就是驱动器。它必须是一个字符串,也可以用数字,不过要用CStr 函数把它转换成字符串格式。事实上它代表的是应用程序或工程的名称。一般来说,appname在整个应用程序中应该保持不便。

   section

   section可以说是这个模型中的目录,就向一台计算机上的目录一样。它用来把设置分类,可以包含Key或者子section。如果给它传递vbNullChar 这个值的话,就表示要操作的键是在根目录下的,也就是在appname下面的。

   key

   相当于一个文件名。

   setting

   它代表文件中的信息,可以是一个数字或者字符串。

   执行完后,在注册表的HKEY_CURRENT_USER\Software\VB and VBA Program Settings\appname\section\"主键下面的名为“key”的键将被赋值为“setting”,如果相应的主键或者键名不存在,将会被创建。

   GetSetting

   这个函数用来从注册表中提取数据。

   GetSetting(appname, section, key[, default])

   Appname,section和key的含义和上面的一样。

   default

   如果Visual Basic没有找到指定的键,函数将返回参数default中得值。这个参数是可选的,但是对错误情况的处理很方便。如果没有选用这个参数,而指定的键的名称不存在,函数将返回一个长度为0的字符串。

   下面看看例子:
SaveSetting "Logon Master", "Users\User0", _
"Name", "John"
注释:这将把数据"John"储存到注册表的 "Logon Master\Users\User0\Name"
注释:不过这是相对路径,相对于一个根

Debug.Print GetSetting("Logon Master", _
"Users\User0", "Name", "Anonymous"
注释:这将显示"John"

Debug.Print GetSetting("Logon Master", _
"Users\User1", "Name", "Anonymous"
注释:这次显示的将是"Anonymous",因为在
注释:"Logon Master\Users\User1\Name"没有预先储存值。
GetAllSettings



   这个函数用来提取某个目录(主键)下面的所有文件(子键)。

   GetAllSettings(appname, section)

   参数的含义和其他的函数都是一样的。但这个函数和其他几个比起来更为复杂。他返回的的是一个2维字符串数组,包含了所有的子键名称和乡音的子键值。看看下面这个例子,你很容易的就能搞清楚:
注释: 定义一个Variant类型的变量来保存GetAllSettings返回的二维数组

注释: Interger类型值用来计数
Dim MySettings As Variant, intSettings As Integer

注释:先在注册表中填入一些值
SaveSetting "Logon Master", "Users\User0", _
"Name", "John"
SaveSetting "Logon Master", "Users\User0", _
"Priviledges", "Supervisor"

注释:提取预先设定的数据
MySettings = GetAllSettings("Logon Master", _
"Users\User0")

注释:显示出来
For intSettings = LBound(MySettings, 1) _
To UBound(MySettings, 1)

注释:MySettings(x,0)中包含的是键名,
注释:而MySettings(x,1) 中包含的是键值
Debug.Print MySettings(intSettings, 0), _
MySettings(intSettings, 1)
Next intSettings



   注意:GetAllSettings并不返回目录名,只是返回键名和相应的键值。

   DeleteSetting

   除了保存和提取数据,我们还要能够删除注册表中的注册项。这就要用到DeleteSetting函数了。

   DeleteSetting appname[, section[, key]]

   这个函数用来删除主键或者键。如果要删除的是键,要给出它所在的键名。如果要删除的是主键,这它下面所有的键和子主键都会被删除。如果你要删除应用程序所有的注册表信息,就只用指定appname就可以了。

   例如:
DeleteSetting "Logon Master", "Users\User0", "Name"
注释:这将删除Name键。
DeleteSetting "Logon Master", "Users"
注释:这将删除"Logon Master\Users"主键和其下的所有内容。
DeleteSetting "Logon Master"
注释:这将删除应用程序"Logon Master"下面的所有内容。
1月10日:改变世界的iPhone七岁了,你是传奇! 同洲电子推出首款手机操作系统960OS 免费授权使用 如何在Windows 8.1的IE11中打开同步选项卡? 25年老对手评价微软:换CEO可行,但是太迟了 【PPT集萃】十位一线专家分享Spark现状与未来(三) 万元奖品等你拿!2014创客118新年大Party! Firefox OS的2013回顾和2014展望 Strom8 CEO:搞好手游开发,合伙人很重要 2013年Q4全球PC出货量同比下滑6.9% 已连续下滑七个季度 一周消息树:2013年十大产品、图书、公司盘点 专访Wunderlist主设计师Jan Martin:永远不要盲目跟风流行趋势 研发周报:超实用的JavaScript技巧及最佳实践 2013最吃香的技能:Java称霸、Android势头正猛 移动周报:最火原型设计工具盘点 “京东电商云”起航,零售企业及品牌商是重点 教育乃立国之本:教育类开源项目大汇集 Hugo Barra首度谈离开谷歌后在中国工作的感受 对中国赞不绝口 母婴行业最早试水者 优谈宝宝借助轻应用全面布局移动产品线 腾讯云平台部总经理纪顺友:微云将彻底迈过文件传输的门槛 豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 微软2014,有你期待的吗? 提问提问!!!数据库连接 任命ravenkatte为大版主 在.h和.cpp文件中切换有什么快捷键吗? JavaScript一个难点!急!麻烦JavaScript老师给以回复! 關於 sqlcommand 查詢的問題100分 为什么无法包含gl/glut.h? 使用SQL语句向Oracle.8.1.7的Blob字段插入较长16进制编码字符串的问题 谁有ASCII码的表 请问在代理服务器上设置多个IP地址有什么好处? 如何用 VBScript实现:奠基一个按钮,显示一段内容? 水晶报表问题 请教高手:汉字内码怎么转化为相应的汉字??谢谢!! 请教!! 关于GetOpenFileName(OPENFILENAME)问题请教 为什么CList<CString,CString&> m_list不能当参数传递?急急急!!!!! 突然听人说在帖子了被人骂的感觉很爽,但本人平时言表谨小慎微,所以一直没机会体会,现在特开一帖,望各位仁兄仁妹开怀痛骂,定以高分相 关于microsoft speech sdk5.1的问题?请高人指点。 急问:在vc6中randmize()函数在哪个库中! 如何屏蔽键盘上的按键? 转会成功!放分庆贺! 大家都用什么语言开发呀?? 请问?在B/S中,如果使用iNotes邮件系统,如何在首页中实现“新邮件”提示功能? 恐怕又是个没有人回答的问题,有谁对DevExpress中的TdxTreeList进行过继承? MASM6.x在哪里有下载? 如何获得TREEVIEW某个根结点下的所有子结点内容? 关于回收站的问题 怎么才能让HTML中的层显示在控件的上面阿!!! 我没有学过C,不过学过C++,要考高程是不是要补C? 菜鸟请教,高手请进! 观(baiyongchun (粒子))的文章:《为什么没有人开发脱离操作系统的应用程序?》有感! 如何用日期来给文件取名? 問一個簡單的問題:ByVal,byRef兩個關鍵字的用處的詳細說明。 水晶报表中打印时无法打印多份 请各位帮忙 有哪位仁兄知道,如何在页面中创建一个可拖动的层?请教了! 请问哪有servlet包的源代码? 取图片发生了错误(代码内,修改了一下代码就报错了),高人指点啊 哪位朋友可以帮忙将这段PHP的代码转成ASP?代码见内,谢谢。 急救 少有问问题,来者有份! SmartUpload组件的Request有问题啊 db中知道如何知道一个已知名字的procedure存在于哪个package中? Windows2000的计算机名的命名规则是什么? 关于microsoft speech sdk5.1的问题?高分请教。 到底有没有人懂 菜鸟提问~~! 关于时钟中断的简单问题!! 我的硬盘完了。。。。。。。。。。。。。。。救救我呀。。。。。。。。。 关于JTree的图标 用jdk能否进行java编程,运行java程序? 如何用代码触发另外一个按钮的click事件!!!!!!!!! 奇怪的问题, 在线等待 江南水乡养育娇小姑娘 下一句是什么? 江南水乡养育娇小姑娘写一句对偶 请问图上这个是啥动物,老家人抓到的 第六题!急! 幸运28总共有28个数字,从0依次到27,它是由三个单独的个位数字相加所得.中奖号码由机器自动产生,您若押中,即可获得奖励.每个数字出现的概率并不一样.比如出现0的可能只有一个,就是0+0+0 已知 f(x) =3x x≥0 f(x) =㏒3(-x) x<0函数:g(x)=f2(x)+f(x)+t,关于函数g(x)零点,下列判断,不正确()A、 若t<-2 g(x)有4个零点B、 t=-2 g(x)有3个零点C、 -2<t< 1/4 g(x)有2个零点D、 t= 1/4 g(x)有1个零点 明清主要诗人诗集,元好问,戴复古.魏晋南北朝诗人,元曲名家介绍. 在等比数列{an}的首项是6,第6项是-3/16,这个数列的前多少项的和是255/64? 客车和货车分别在两条平行的铁轨上行驶,客车长150米,货车长250米.如果两车相向而行,那么从两车车头相遇到车尾离开共需10秒种;如果客车从后面追货车,那么从客车车头追上货车车尾到客车 一位同学计算小数加法时,总是精确到各位后再相加,一次在计算四个两位小数(百分位上数字不为0)的加法时得数为18,如果按原数(不取近似值)相加,那么和最大是多少?和最小是多少 四个两位小数,百分位不为0,相加得18,按原数(不取近似值),那么最大是多少,最小是多少. 一架卡-52飞机在莫斯科坠毁 或为技调查:美国幼童使用移动设备已成为普遍美国有意叫停窃听盟国元首 部门“内讧欧洲风暴肆虐 高校推风暴命名项目收费韩外长:日本错误历史认知阻碍韩日关系日知名主播之子因盗窃被解雇 检方暂不奥巴马提名两名竞选支持者为美国驻外大韩在独岛海域清理垃圾17吨 吁居民游日土发表共同宣言 安倍决心加强战略伙意大利比萨斜塔修复见成效 12年扶正美称法国西班牙自行实施电子窃听行动 国家工艺大师 帮你鉴赏紫砂壶用责任推动家居行业前行重庆约50辆特斯拉 只一个超级充电站19000多台专用手机监测地质灾害一张图教你发掘中巴概念股首创置业开启创新都市新生活万款厂家专供家具“五一”临城全市组织校园足球四级联赛力帆队内心态不稳 老总:打联赛需要平用设计装扮春天沃尔玛生鲜商品 14天无理由退货养鬼为患一等世子妃青涩纯恋幸福归来时迷爱围城后夺乾坤怪事上门最后一个道士Ⅱ娱乐圈教父长安曲少爷一笑狠倾城克拉码头旅游一线潮旅游东圳水库旅游长安区博物馆旅游西冲情人岛旅游花鸟灯塔旅游南湾海滨浴场旅游花鸟岛旅游方特欢乐世界蓝水星旅游瓜皮岛旅游察尔森国家森林公园旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘