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

读取和修改Windows注册表 -VB资料

HTML文档下载 WORD文档下载 PDF文档下载
读取和修改Windows注册表 -VB资料
使用Visual Basic读取和修改Windows注册表

  在过去,Visual Basic应用程序的开发者们对于如何在两次应用程序的运行之间保留状态信息感到非常的困难。这是因为基于Microsoft Windows的应用程序(包括Visual Basic)需要将应用程序的状态信息写入到一个文本文件(*.INI文件)中,且需要经常对这些文件中的文本进行分析,以包含有用的状态信息。

  现在,随着Windows95以及WindowsNT这类32位操作系统的到来,应用程序可以通过使用一个叫做Windows注册表的存储场所来保留应用程序的状态信息,并且将它们自己注册在系统之中。通过位于ADVAPI32.DLL中的C语言应用程序编程接口(APIs),对注册库的提取和修改变得非常容易。这对于使用C和C++的程序员来说真是太好了,不过对于那些使用其它编程语言,例如Visual Basic的程序员来说,使用这些编程接口还需要进行许多额外的工作。

  作为一个VB程序员,你首先必须在一个*.BAS文件中定义注册库函数的原形,这些函数原形必须同存储在ADVAPI32.DLL中的所需要的注册库APIs相兼容。你还需要添加那些对调用这些APIs所需要的结构和常量的声明。这些对函数原形,结构以及常量的声明全部包含在VBREG.BAS文件中,该文件是VBREG,本文的配套样例代码的一部份。要在任何32位的VB工程中使用这些注册库APIs,只需要简单地将VBREG.BAS文件包含在工程中。

  注意:如果你决定在VBREG.BAS文件中添加额外的APIs,结构或常量,在对它们进行声明的时候需要格外小心(特别是这些函数的参数)。要想这些在你的Visual Basic代码中被调用的APIs按照你所预想的工作,正确声明这些函数的参数是异常重要的。许多这类声明的例子可以在WIN32API.TXT文件中找到,该文件作为Visual Basic系统的一部份同时被安装,但是你可能需要对这些声明进行修改,以便使它们能够正常工作。你还可以在WINNT.H文件中找到额外的一些有用的注册库常量,在WINERROR.H文件中找到额外的一些有用的错误常量,这些文件随着Visual C++一起被安装。

  一旦你将一个文件,例如VBREG.BAS包括在你的工程中,你就可以在你的VB代码中调用这些注册库APIs。要记住的是你所转递的参数必须有效且包含有效的值。另外,当STRING值被返回时,必须为此字符串创建一个空间来容纳它。这些APIs,结构以及常量在VBREG样例应用程序中都有说明。

  Windows注册表通过四个主要注册关键字来组织:HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HEKY_LOCAL_MACHINE,以及HKEY_USERS。在本文中假设你对于这些关键字已经非常熟悉,已经知道如何使用子关键字,以及已经了解在注册库中所包含的值的类型。子关键字可以用“HighestSubkey\NextLevelSubkey\LowerLevelSubkey\”(不包括引号)的形式来表示。其中“HighestSubkey”是最高级的子关键字,它直接位于四个主关键字之下。

  注册关键字可以被创建,删除,打开,关闭。正如你可能所想到的,一个注册关键字在能够使用之前需要首先创建它,在对一个注册关键字进行修改之前必须要首先打开它。在应用程序执行期间,你应该关闭所有的当前未被使用的关键字,并且你应该仅仅只删除那些你能确定将来绝对不会再使用的关键字。

  注册值可以被创建,查询,修改以及删除。一个值在它能够被查?之前必须已经被创建或是修改(通过使用RegSetValueEx来完成)。同注册关键字一样,如果你想删除它,你需要确定它将来绝对不会再被使用。

  另外,注册关键字和值可以被枚举,以助你决定当前的那些输入是可以使用的。如果你在编译期间不能够确定对哪些关键字或值感兴趣,枚举功能就非常有用了。

  有一点很有趣的注意事项是RegDeleteKeyAPI在没有子关键字的情况下将只删除注册关键字。由于这个原因,VBREG不允许删除一个带有子关键字的关键字。不过你能够很容易的添加删除关键字以及子关键字的功能,你只需要创建一个过程,该过程枚举你需要操作的关键字下的所有子关键字(以及这些子关键字的子关键字),并且在删除该关键字之前首先删除所有的子关键字。对于每个子关键字都应该在RegDeleteKey函数中检查ERROR_ACCESS_DENIED标志,这样的有效的递归进程能工作得很好。

  VBREG使用HKEY_LOCAL_MACHINE,在如下的VBREGForm_Load()过程中被设置:hKey = HKEY_LOCAL_MACHINE
  通过将此变量设置为其它的四个主注册关键字之一,你能够很容易的使用它们。更进一步,你能够从用户或是一个已知的注册库位置获取这些信息。

  使用这些注册表APIs,一个比较好的方法是检查函数所返回的值以确定函数的调用是否成功(如果函数调用成功,它将会返回ERROR_SUCCESS标志)。如果不成功,你还可以检查错误值,基于错误发生的类型,你可以决定你的应用程序接下来该怎么做。还有一个比较好的方法是使用注册表APIs(例如在VBREG样例中的CreateRegKey函数)来为错误设置陷井,以决定你的应用程序在错误发生后的行为。

  VBREG创建和修改的值都是REG_SZ类型(Unicode空结束字符串)的值。这里还有几种其它类型的值可以在注册库中使用,例如REG_BINARY,REG_LINK,以及REG_DWORD。例如,要写一个REG_DWORD类型来替换REG_SZ类型,则SetRegValue过程的RegSetValueEx调用应该被改为:
lResult=RegSetValueEx(phkResult,sSetValue,0,REG_DWORD,CInt(sValue),4&)
  这里假设该“sValue”包含一个可以被转化为一个整数的值。你可能会需要在代码中进行更深入的修改以使用这些其它类型的值。

  在你能够使用一个注册库关键字之前,该关键字必须被创建。RegCreateKeyExAPI提供了运行时刻的这个功能。如果关键字不存在,则RegCreateKeyEx将创建一个新的关键字,而如果关键字已经存在,则将只简单地将它打开。下面是在VBREG的CreateRegKey过程中对RegCreateKeyEx的调用。

CreateRegKey=(RegCreateKeyEx(hKey,SubKey&NewSubKey,0,"",_REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,_SA,phkResult,Create)=ERROR_SUCCESS)

  如果RegCreateKeyEx函数返回了ERROR_SUCCESS标志,则你可以为REG_CREATED_NEW_KEY或REG_OPENED_EXISTING_KEY检查Create参数,以确定是否有一个新的关键字被创建。在上面的调用中,REG_OPTION_NON_VOLATILE创建一个持久的关键字,KEY_ALL_ACCESS则给予所有的用户对此关键字的完整的访问权利。其它的选项也同样能够被指定。这些选项在VisualC++所带的Windows API参考中有更深入的解释。

  一旦你有需要的注册表关键字,你可以使用RegOpenKey或RegKeyCreateEx来在将来需要的时候打开它们。你可能会注意到在VBREG中在看上去应该使用RegOpenKey的地方使用了RegKeyCreateEx。我发现如果不使用RegKeyCreateEx来打开此关键字,则有一些操作将会返回ERROR_ACCESS_DENIED标志。这可能会构成额外的开支;如果该关键字不存在的话它将会真正地创建此关键字。如果这不是你所需要的,你应该试着在调用RegCreateKeyEx之前首先调用RegOpenKey,然后看看它的调用是否成功。

  一旦一个关键字被打开,你可以使用RegSetValueEx来设置它的值,如果需要的话,你也可以创建它。如果一个值还不存在,而你又不想创建它,你应该在调用RegSetValueEx之前首先调用RegQueryValueEx,然后测试它的返回值是不是ERROR_SUCCESS。下面是在VBREG的SetRegValue过程中对RegSetValueEx的调用:

lResult=RegSetValueEx(phkResult,sSetValue,0,REG_SZ,sValue,_CLng(Len(sValue)+1))

  在上面的调用中,REG_SZ是被写入的值的类型。正如在前面所提到过的,如果你正确转递参数,你也可以写入其它类型的值。
  你还可以通过使用RegQueryValueEx来在注册库中查询一个存在的值。如果此函数调用成功,它将会返回ERROR_SUCCESS标志。下面是VBREG的GetRetValue过程中的代码段:

'Creatthebuffer.
 szBuffer=Space(255)
 lBuffSize=Len(szBuffer)
'Openthekey.
 RegOpenKeyEx(hKey,lpszSubKey,0,1,phkResult)
'Querythevalue
 lResult=RegQueryValueEx(phkResult,szKey,0,0,szBuffer,lBuffSize)

  在这里需要注意的最为重要的事情是要为缓冲创建足够的空间。使用C语言APIs返回一个STRING值作为一个输出(out)参数(例如RegQueryValueEx的第5个参数),你必须显式地为此参数定义一个空间。如果这项操作失败,将会导致产生一个不可预料的结果值。

  这篇文章意图告诉你在VisualBasic4.0应用程序中如何使用Windows注册表APIs。如果你希望看到更多的有关Windows注册表或注册表APIs的信息,请参考Visual C++所带的Windows API参考,以及在Microsoft开发库(Microsoft Development Library)中有关的文字。
HTML5:助力智能电视生态实现新跃迁 MDCC 2014移动开发者大会公布全部议程 求更密集!Apple Watch SDK将于11月正式开放 【答疑】微信开放平台开发者资质认证 专访Informatica亚太和日本区副总裁Murray Sargant:中国公司正考虑数据资产货币化 Facebook又开源:让iOS应用界面极致流畅的ASDK框架 一周消息树:盘点史上最具毁灭性的软件Bug 微信公众平台设备功能支持个人开发者接入 2014中国移动开发者大调查第三批获奖名单曝光 微信企业号上线,带你看看它的真面目! OpenStack Juno版本发布——支持Spark和NFV 【十问十答】对话Go语言开发团队 苹果要求、Android开始,64位时代真的来了! MDCC 2014产品与设计论坛:带你发现产品之美 Java开发者值得关注的7款新工具 助力国产移动产品出海,UCloud部署北美节点 Zack Parker:用EC2在Cotap上打桩 用卫生棉杀敌冲关!两个高中女生的创意游戏 专访《Java程序员修炼之道》作者Ben Evans:保守的设计思想是Java的最大优势 Google收购Firebase 帮助程序员快速开发出移动App和Web App 微信支付开发关键点技术解析 游戏任玩!开源虚拟现实头戴式设备Open DoVision MDCC大会召开倒数10天 看Twitter、Facebook和国内“BAT”三大巨头最新动态 《近匠》Wijmo 5 CTO:从Web到移动,我的25年编程生涯 重复充电、防丢失!多功能智能行李箱Bluesmart 【设计经验传承】图标设计初阶要先型 “光年”光纤路由 支持千兆网络的家居中心 MDCC 2014移动开发技术与平台峰会:知名应用技术大牛传授实战经验 Unity生态圈将变?EA前总裁接替创始人任新CEO 第九届中国Linux内核开发者大会在京举办 《近匠》爱拍SDK:手游录像分享 爱拍才会赢 各位老大,怎样将给定的中文根据拼音排序? access97中的报表中显示中文字段时为什么是乱码,怎样解决,急呀!老大们!! 急:在哪儿可以下载java的反编译器jad.exe????? 请帮忙 做过数据分析的高手请进。。。(我感觉很头疼的一个问题!) 共享Interent怎样实现? 请问绿色程序是如何制作的??? Windows API和C 请问怎样把form中的picture属性中的图片删除? 请看看这个问题? 中程书上的错误?(清华) 各位大虾过来看看,救救我啊! flash简单问题 已知IP,求计算机名 求备份方案,oracle 数据库! 求解決方案:怎樣在運行狀態下增加或取消文本輸入框的滾動條. 大家发表些看法! 各位 帮帮忙,关于答复文档的 如何获取手机中的短消息发送结果状态报告,需要懂一点手机短信的朋友 有没有办法去掉jre1.4下向JTextField输入中文时弹出来的那个恶心的输入窗口? 将web工程加到sourcesafe的问题,十万火急,帮忙解决一定给分,分数不够可以其他方式给。 在sqlserver中有字段类型为image,如何往该字段放图象?200分 基础问题 NT ,when boot ,can not find system 关于internet上的控件打包??????????????? 请各位高手帮忙解决!谢谢!! 谁能告诉我那几个网络论坛比较好 如何实现socket 的多线程 高手请这边来瞧瞧 如何在ODBC应用程序中使用CListView? excelapplication控件???教教我吧,我不知道为什么?很简单的。 关于internet上的控件打包??????????????? 谁知道autovuex.ocx 控件(可以显示CAD等图形)哪儿有下载??拒绝up 大家都用VC吧,这个怎么实现? 能否用变量的内容说明对象 在 广州那边招DELPHI程序员的公司多不多呀! 请问在网页里,图片在装载完前,显示的区域是一个小方框再扩成一个图像,是怎么做的? 如何在ODBC应用程序中使用CListView? 关于获取list控件值的问题!在线等候!谢谢! 请帮忙提供一点怎样学习Delphi的知识! fireworks4.0英文版关于动画的制作? 求租西三环,紫竹院,首师大,航天桥,花园村附近的一居,价位在1000左右 WORD问题 谁知道autovuex.ocx 控件(可以显示CAD等图形)哪儿有下载??拒绝up ●●●最恶心内容,谁看了谁吐,不信,试试看?! 如何从文本文件中读取数据? 怎样建立一个局域网? 高分那里有JBuilder7下载, 提供者都有分(每人5-20分) 请问如何让dbgrid支持多选? 桌面设置小问题? 调用embed 方法播放avi文件需要客户端安装相应软件么? 小明和小亮的身高都约为1.8×10²cm,但小明说:“小亮比我矮9cm”,请说明 建筑系数怎么算呢 给我几个关于昆虫的电影 最好是灾难片 有6张扑克牌反扣在桌面上3,4,5点的各2张,任意点数之和有几种可能摸起2张,这2张扑克牌上的情况求求大哥大姐了我明天就要交了,我 数字也要列出来 爱祖国爱家乡作文600字不要太好的 一副去掉大、小王的扑克牌中,随意抽取一张,抽到的牌是红色的.可能性有多少? 有4张扑克牌,数字为3,5的各2张,任意摸2张,2张扑克牌上的数字和有几种可能情况?↓ ↓ ↓ ↓ ↓ ↓ ↓如果再增加一张数字为4的,又有几种可能情况? 四年级语文电脑住宅这一课电脑住宅建在哪个国家设计师是谁 从一副扑克牌中随意抽一张,抽到方块的可能性是多少? 圆r=1被心形线r=1+cosθ 分割成两部分 求这两部分的面积 计算二重积分∫∫x^1/2 dxdy,其中积分区域D是{(x,y)|x^2+y^2≤x}. 求大神解答,谢谢! 从一副扑克牌中任意抽取一张,抽到红桃2的可能性与王(含大、小王)的可能性是多少? 灯光为啥可以吸引昆虫? 具加什么笔画,在组词,在造句 爱祖国爱家乡征文500~600字谢谢了有关天津芦台的, 设D是由y=x,y=0,x=π所围成的闭区域,则二重积分(sinx/x)dxdy= 小松和小强的身高大约都是1.5×10的2次方cm,但小松说她比小强高9cm,请问有这种可能吗 爱祖国 爱家乡的征文 什么灯光吸引昆虫效果好昆虫喜欢什么颜色的光啊快. 小强身高160厘米比小华高7分之1求小华身高 爱祖国爱家乡的征文! 二重积分计算∫∫(x^2-y^2)dxdy D是闭区域0 一副扑克牌有几张方块8 变化的昆虫有哪些 计算∫∫ sinx/x dxdy D是由曲线y=x^2,y=x所围成的区域 一副扑克牌方块3有几张? 3有几张?快 求一些变异昆虫的电影(最好是蟑螂)我超级怕蟑螂,天天晚上出来捕杀,不过我这个可能有点BT,我喜欢看一些变异的昆虫电影,就类似金刚里面那些变大的蜘蛛虫子什么的,我要的只是蟑螂,不 计算二重积分 ∫D∫(sinx/x)dxdy,其中D为由y=x,y=2x和x=1围成的平面区域 我每分钟打30个字,我听老师说,四年级里最快的一分钟七十个字,我想知道,如何加快打字 有什么方法一分钟可以打六十个字啊 去同学家要一份500字的初中作文写得好再加分 一副扑克牌有多少方块 一分钟打60个字慢吗? 小明和小亮的身高都是1.7乘10的平方厘米,但小明说比小亮高9厘米,问有这种可能吗?请举例说明.没什么 我想测试一下我一分钟打多少字,下什么软件啊 一分钟打60个字速度怎么样?求大神帮助 我们的家 初中作文 是写说明文本人急要速度 `` 一副扑克牌(54张)至少要取多少张才能保证一定有一张方块? 公共建筑的体形系数不能超过多少? 格格和琪琪的身高都约为一点六乘十的二次方厘米,格格比琪琪高九厘米,问有这种可能吗?若有,举例 给推荐几部 人类和成灾虫子或者DNA变异虫子或者植物战斗的电影 星河战队(就第一部好看,剩下垃圾) 和 异型 生化危机 迷雾 系列就别说了 说点别的 没看过的 成本不见得要多高.就要这个 关于住宅节能计算中体形系数的问题.本人刚开始实习,对于节能计算不甚了解,计算体形系数需要知道建筑外表面积和体积,我想知道大家都用什么方法计算外表面积和体积呢,是用计算层建筑 我当一天家初中作文300字左右 一步美国电影关于外星人的,一个小男孩和一个外星人,外星人长得像昆虫.是在一本书上看到的 ,海报的样子是这样的,那个外星人长得有点像昆虫,手指头特别长,那个小男孩头发是金黄的,应该 油漆中要加入什么助剂 甲、乙两同学的身高都约是1.7*10的二次方厘米,但甲却比乙高9厘米,有这种可能吗?为什么?举例说明 我是88年的,记得小时候看过一部动画片,有个小男孩耳朵里住着一个会飞的小虫子,是什么动画片呢小男孩,一思考,耳朵里就升温,然后就把小虫子的屁股烧的红红的飞出来,说是热死了什么的,只 助剂 添加到油漆中的 在哪边有卖的 联系方式等等 你想设计一个怎样的电脑住宅ppt 电影讲外星人.和一个地球男孩外星人好特别看起来好象是昆虫然后男孩救了外星人外星人说三年后.我一定来救是什么电影啊?结果哪个男孩不知道为什么变了外星人的人一样.人不象人.外星 求个动物变异灾难片! 计算二重积分:∫∫(a-√(x^2+y^2))dxdy,D的范围:x^2+y^20 一部关于昆虫的电影主要就是描写一直瓢虫从出生到四处游历的电影,以瓢虫的视觉拍的,主要就是讲自然界的各种生物,适合小孩子启蒙,忘了叫什么名字了!开始出来的时候 碰到小苍蝇,然后被 求一部灾难片,跟宇宙里吃一切东西的虫子有关就是类似虫子的生物从宇宙里来,吃掉一切可以吃的东西.看了片段, 计算二重积分∫D∫dxdy/√(4-x^2-y^2) D的范围{(x,y)|1《x^2+y^2《4,y>0} 规划总用地面积怎么算?还有建筑系数 涂料储存期应加入什么助剂? 小明和小兵的身高都大约1.8x10的2次方cm,但小明说:“小兵比我矮9cm."这说对吗?说出理由如题,紧急!理由要全面 建筑系数怎么算 前言看的一部电影就是一中昆虫飞到人的体内把人杀开昆虫又飞出来了是灾难片
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘