返回爱好者网站首页
 
商城 博墅 论坛
首 页 | 学 院 | 数 码 | 硬 件 | 装机DIY | 台式机 | 办 公 | 数字家电 | 视频教程 | Flash小游戏 | 桌面壁纸 | 精彩专题 | 活动
  数码数码相机 手机 MP3/MP4 笔记本 GPS 硬件CPU 主板 存储 音频 显示器 显卡 投影机 机箱/电源 外设 术语 学院资讯 系统 软件 安全 网络 办公 设计 程序 问答
装机DIY家用 网吧 办公 娱乐 2000元 4000元 6000元 8000元 DIY技巧 答疑 台式机入门 家用 办公 娱乐 购买技巧 答疑 办公打印机 多功能一体机
学院首页 | 新闻资讯 | 操作系统 | 软件应用 | 创意设计 | 程序开发 | 办公技巧 | 网络应用 | 个人安全 | 素材推荐 | 故障问答
CFan新视界 | 软件专区 | Vista专区 | XP专区 | 站长专区 | 专栏作者 | 精彩专题
· PhotoShop CS · Dreamweaver · Flash · ASP · Excel · Word · CorelDRAW · 3D Max · PhotoShop 7.0 · 常用软件
当前位置: 首页 学院 程序 VB

用VB操作注册表

1000元免费加油卡,点击就送 很酷很个性 我的QQ空间留言最最炫  

2008-08-04 作者: 来源:chinavb
·抠图——孔雀美女
·胆小者勿进
·教你打造蝶蝎美人
·正在消失的美女
·亲手给MM加幅眼镜
·合成绝美的天上人间
·古堡中的梦幻女孩
·合成密林深处的公主
·墙壁上的剥落女孩
·森林里的蝴蝶公主
  

在Windows出问题时,如果能够了解Windows系统的注册表,将更容易解决问题; 许多商品化的软件或专业化的软件在您的机器上首次安装的时候都会通过改写注册表来完成软件的正确安装运行,要成为编程高手当然需要掌握读写注册表这一技术。用好注册表将会为您的应用程序增色不少,下面笔者将具体介绍VB中与注册表有关的编程方法。
注册表的组织结构
存取注册表以前, 必须先了解注册表的组织结构, 而了解注册表的组织结构最简单的方法便是启动 Windows 提供的“注册表编辑器”, 启动的方法是单击“开始”菜单的“运行”命令,输入 RegEdit 之后确定,可看到“注册表编辑器”窗口(如图1所示)。

图1
● 键(Key) 与子键(Subkey)
注册表编辑器的结构与资源管理器很类似, 左边窗口的每一个文件夹图标表示一个键,就像文件夹下还有子文件夹一样, 注册表的键下也有子键。为了完整地表示某一个子键,习惯上是采用文件夹的路径表示法。 举例来说, HKEY_LOCAL_MACHINE 之下的“Software”子键表示成 HKEY_LOCAL_
MACHINE\Software,而“Software”之下的 “Microsoft”子键则表示成 HKEY_LOCAL_
MACHINE\Software\Microsoft(如图2所示)。

图2
● 键值(Value)、键名(Value Name)、数据(Value Data) 与默认键值(Default Value)
当我们在注册表编辑器左边窗口选取某一个键(或子键) 之后, 出现在右边窗口中的是这个键的键值(Value),键值可分成键名(Name)及数据(Data)两部分。对每一个键而言, 至少都含有一个默认键值(Default Value) , 以 “HKEY_CLASSES_ROOT\
.bmp”子键为例, 其默认键值为 “ACDC_BMP”。 除了默认键值之外, 这个子键还含有名称 (Name)“Content Type”和数据 (Data)“image/bmp”(如图3所示)。

图3
VB 自身提供的
关于注册表的函数
了解注册表的组织结构之后, 接下来讨论如何存取它。就像我们存取文件时必须指明文件所在文件夹(目录)一样, 存取注册表时, 则必须先指明键。键在注册表编辑器中所看到的是一长串的字符串,例如 “HKEY_LOCAL_MACHINE\SOFTWARE\
Microsoft\Windows\CurrentVersion”。在 Visual Basic 6.0 内部,已经提供了一个标准的注册位置,以存储创建于VB的应用程序的程序信息:HKEY_CURRENT_USER\Software\VB and VBA Program settings\(为了叙述简单,以下将这一位置简称“标准位置”)。VB 提供了两个语句和两个函数来处理存储在应用程序注册位置的程序设置值:
函数GetSetting(appname, section, key[, default]): 检索注册表设置值。
语句SaveSetting appname,section,key,value: 保存或创建注册表设置值。
函数GetAllSettings(appname, section): 返回一个包含多项注册表设置值的数组。
语句DeleteSetting appname, section[, key]: 删除注册表设置值。
以上所用参数的说明:
[ ]: 表示可选项。
appname:字符串表达式,包含应用程序或工程的名称,是标准位置下的一个子键。
section:字符串表达式,包含区域名称,是 appname 下的一个子键。
key:字符串表达式,标准位置\appname\
section子键的键名(Value Name)。
value:字符串表达式,标准位置\appname\
section子键对应于键名(Value Name)的键值(Value)。
default:表达式,如果注册表项设置中没有设置值,则返回默认值。如果省略,则 default 取值为长度为零的字符串 (“”)。
GetAllSettings返回Variant,是内容为字符串的二维数组,该二维数组包含指定区域中的所有注册表项设置值及其对应值。 如果 appname 或 section 不存在,则GetAllSettings 返回未初始化的 Variant。
实例之一
在 VB6.0中新建一工程并命名为 vbreg.vbp,删去其中所有窗体,在工程资源管理器中点击右键,选择添加模块,并命名为 vbreg.bas。双击reg.bas,输入如下代码:
Dim avntSettings As Variant
Dim intX As Integer
avntSettings = GetAllSettings(“VB 6 API 声明加载器”, “File List”)
For intX = 0 To UBound(avntSettings, 1)
Debug.Print avntSettings(intX, 0), avntSettings(intX, 1)
Next intX
上面这段程序首先用 GetAllSettings 函数检索“VB 6 API 声明加载器”子键File List部分的两个注册表项的值,并将其结果显示在立即窗口中。开始运行前请按<CTRL>+<G>确保立即窗口显示在屏幕上。同时请打开注册表,以便将标准位置\VB 6 API 声明加载器\File List的键值与结果进行对照。
下面这段程序用 SaveSetting 语句在标准位置下建立名为“我的工程\我的子键”的子键,然后使用 GetSetting 函数来得到其中一项设置值并显示出来。因为有传入参数default,GetSetting 函数一定会有返回值。
请注意,区域名称不能用GetSetting 函数取得。最后,使用 DeleteSetting 语句将该子键删除。
SaveSetting “我的工程”, “我的子键”, “Top”, 75
SaveSetting “我的工程”, “我的子键”, “Left”, 50
Debug.Print “Top”, GetSetting(“我的工程”, “我的子键”, “Top”, “25”)
Debug.Print “Left”, GetSetting(“我的工程”, “我的子键”, “Left”, “0”)
’为了便于观察,调试可以在此处设置断点,同时切换到注册表,按下<F5>键刷新,即可看到自己建立的子键及其键值
DeleteSetting “我的工程”, “我的子键”
’运行完毕后再次切换到注册表并按下<F5>键刷新,观察己建立的子键及其键值是否被删除
说明: 运行本程序前,需先确保启动VB时已自动加载“API文本浏览器”,且在API文本浏览器中的“文件”菜单下有打开过的“文本文件”列表。否则,请先打开“API文本浏览器”,并在“文件”菜单下选择“打开文本文件”,打开至少一个文本文件或数据库。
Windows API 的注册表编程
VB自身虽提供了四个关于注册表的函数,但是这些函数只能在“HKEY_CURRENT_USER\
Software\VB and VBA ProgramSettings”下读取、删除、修改键值。这对于一般的应用程序利用它们可以达到目的,如果想对其他的非“标准位置”的主键或子键进行访问,该怎么办?此时,必须借助Windows API的帮助。
在Windows内部, 每一个键都会对应到一个 Key Handle(等于一个长整数值,程序中通常以 hKey表示),Windows之所以要以hKey来代表键是为了让注册表的存取更有效率,因为整数的操作效能要优于字符串, 所以我们首先来了解如何取得键的 Key Handle(即hKey)。位于最上层的键,有HKEY_CLASSES_ROOT、HKEY_CURRENT
_USER、HKEY_LOCAL_MACHINE等,这些键的hKey值是固定不变的,其值见下表:
-----------------------
  Key      Key Handle
-----------------------
HKEY_CLASSES_ROOT    &H80000000
HKEY_CURRENT_CONFIG &H80000005  HKEY_CURRENT_USER &H80000001
HKEY_DYN_DATA &H80000006
HKEY_LOCAL_MACHINE &H80000002
HKEY_USERS         &H80000003
--------------------
但如果要取得这些键的Subkey Handle,则必须调用RegOpenKey API函数,RegOpenKey含有三个参数,用法如下:
Private Declare Function RegOpenKey Lib “advapi32.dll” Alias “RegOpenKeyA” (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
这里hKey是Key Handle,lpSubkey是子键的字符串,PhkResult是函数返回值,若 RegOpenKey调用成功, 则此参数将传回子键的hKey。
举例来说,我们想取得HKEY_LOCAL_MA
CHINE之下的“SOFTWARE\Microsoft”子键, 则使用的声明是:
Dim ret As Long,hKey As Long
ret=RegOpenKey(HKEY_LOCAL_
MACHINE, “SOFTWARE\Microsoft”, hKey)
If ret = 0 Then
’ret=0表示成功,hKey的值等于“SOFTWARE
\Microsoft”Subkey的Key Handle
End If
请注意调用注册表API函数(例如以上的 RegOpenKey)之后,若成功将传回0,否则传回非0值,这一点与VB函数的惯例并不相同,请特别注意。
RegOpenKey 的第一个参数 hKey 除了可以指定最上层的Key Handle值(例如 HKEY_CLASSES
_ROOT、HKEY_LOCAL_MACHINE等)之外, 也可以是一个 Subkey Handle。如上例, hKey 等于“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft” 的 Subkey Handle, 接着如果我们要取得 “HKEY_
LOCAL_MACHINE\SOFTWARE\Microsoft\
Windows\CurrentVersion” 的 Subkey Handle, 则程序如下:
Dim ret As Long, hKey As Long, hKey2 As Long
ret=RegOpenKey(hKey, “Windows\Current
Version”, hKey2)
’hKey2将等于“HKEY_LOCAL_MAC
HINE\SOFTWARE\Microsoft”的“Windows\
CurrentVersion”的Subkey Handle
在以上程序中,请注意不要在“Windows\
CurrentVersion”之前加上“\”,使之成为“\Windows
\CurrentVersion”,这是错误的表示方法。
下面简单地介绍一下其他几个API(32位API):
● RegSetValueEx(): 在打开的注册表关键字的值域中存储数据;
● RegCloseKey(): 释放指定的关键字的句柄;
● RegQueryValueEx(): 在注册表中查找与您指定的键值相关的值;
● RegCreateKeyEx(): 建立并打开指定的关键字,若已存在则打开它;
● RegEnumKeyEx(): 枚举指定的注册表关键字的子关键字(32位);
● RegEnumValue(): 每次调用枚举指定的注册表关键字的值,复制一个带索引的值的名称和数据块;
● RegDeletekey(): 删除一个关键字以及它的子关键字;
● RegDeleteValue(): 在指定的注册表关键字中删除一个带名字的值。
结束语
通过调用这些API以及VB提供给我们的函数,我们可以轻松实现注册表的任意关键字的读取、查询、建立和删除,详细的用法可查阅“API浏览器”,在这里就不再进行讨论了。

上一篇 VB编程实现图像的漂亮
VB编荧屏焰火屏保程序
· VS.Net水晶报表实现方
· 树视TreeView的使用技
· ——细水长流话 API
· VB使用天宇报表控件
· 用VB程序编写抽奖程序
VB用第三方控件打造QQ
· VB图像在数据库存储与
· ——写给正想学VB和正
· ——细水长流话 API
· ——细水长流话 API
· VB中水晶报表编程方法
热点推荐



· 用完电脑一定要洗把脸
· 电脑一族必喝的健康饮料
· 炎热夏天 多吃三类蔬菜
· 卖什么都有,卖脸你见过吗
· 无聊老师的17则爆笑语录
· photoshop快捷键大全
· 《功夫熊猫》经典台词!
· 近距离接触中国击剑队
· 分享网络推广的八种方法
站外资源推荐
无标题文档
绝色空姐汇聚的航线
评论
评论排行
用VB制作一个简单的MP3播放器
自制王码五笔字型输入法安装包
微软副总给中国大学生的信
用VB制作验证码生成器
用VB6写简单程序 让电骡自动关机
程序设计中的感悟
Flash编程不难 轻松让节日烟花放起来
关于Visual Basic 9.0的动态标识符
用VB跟我学做记事本(很简单哟)
网络编程中的一些技巧

笔名

匿名发表

验证码:

查看评论
* 评论只代表网友个人观点,与电脑爱好者网站无关,不代表电脑爱好者网站也同意此观点。
 
热点专题
 
· 用DW打造自己的Blog
· 09年广州车展
· 狂人马云与阿里巴巴
· 开个网店做老板
· Web服务器架设攻略
· 三大浏览器应用技巧
· 建站四步曲
· 月入上万的程序员们
· 如何推广新网站及赚钱
· 手机铃声制作攻略
· 系统安装步步通
· 新手学电脑
热点文章
 
傲游使用技巧 地址栏图标的妙用 一个校园网站的成长历程
让你操作Windows于弹指之间 利用Google地图驾车环游世界
看看在线操作系统什么样

歌曲下载快到飚 搜狗音乐盒大体验

QQ专区
 
站长专区
 
·做ADSENSE的英文站月薪几千
·再谈:什么样的网站能赚钱
·江礼坤:手把手教你策划网站
·教育类网站如何赚钱
·十招让内容页流量翻番
· 个人网站建设到底怎样赚钱
·月赚三四千元 网上开店秘笈
·站长如何有效推广网站
·一个校园网站的成长历程
·如何防止自己的站被人采集
论坛博墅
 
·玩转Vista加速与优化
·十招学会软件的破解
·Ubuntu 安装的一小点心得
·手动去除迅雷广告
·揭秘黑客真身
·QQ秘籍让你成为QQ高手
·硬件检测软件逐个看
·劲舞团不能倒闭的八大理由
·2月5日 单机游戏下载合集
·国内网页设计网站大全
无标题文档
快速链接:站长专区 Vista专区 XP专区 风行软件专区 电脑必备软件 免费在线小游戏 免费在线视频教程 学院专题 数码专题 硬件专题

爱好者网站版权所有 未经授权禁止复制或建立镜像
Copyright(C) cfan.com.cn,All rights reserved
京ICP证010182号