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

读取和修改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)中有关的文字。
GitHub再遭攻击 主要服务中断约一小时 移动开发者将有望拥有.app域名使用权 微信将推“游戏中心”?移动互联网入口圈地加剧 美国航空公司首次开放API 并举办“黑客马拉松”编程大赛 谷歌数据中心设计的10条“黄金法则” GitHub时代:为什么我们都在开源 VMware发布Horizon Suite 三款应用打包折扣低 TOP30+应用排行榜:二月份国内外综合榜单 开源是否意味着不需要负任何责任? 微软年度科技展 酷炫技术知多少 图解Hadoop生态系统 HTML5并不给力 微软IE10又默认启用Flash Oracle出新提案:Java正逼近iOS? TIOBE 2013年3月编程语言排行榜:厚积薄发 Ruby反超Perl 清华大学开源镜像站将被关闭 发表公开信 前Google资深研究员赵勇回国创业 专注计算机视觉/模式识别 开发者福音,微软开源Kinect源代码 日本很积极:富士通和NEC确认将推Tizen设备 10大支持移动“触摸操作”的JavaScript框架推荐 数据科学家的争夺及美分析学专业研究生院的建立 从开放走向封闭 Netflix宣布停止发布API key 《植物大战僵尸》神秘续作:可能是一款横版游戏 高性价比:GlassUp宣布支持Windows Phone系统 未挖掘到足够信息:非收集数据少,是利用率只有1% 下一个帝国:谷歌收购初创公司DNNresearch 苹果更新Apple Store应用,可查看零售店库存 开源软硬件:福特汽车的OpenXC计划 Temple Run:Oz稳坐付费榜头把交椅,迪士尼名利双收 Facebook开放图谱示好开发者 新增书籍电影等九项操作 源代码管理的六大视觉模式 最新算法面世 可提高云数据库性能 菜鸟问题:日期范围的查找,为何如此难? 怎样实现用鼠标来控制控件在窗体中的宽度 主文件中的JSP变量不通过session可以在<iframe>所指的JSP文件中直接使用嘛?给分很快哦! if then 语句不是这么写吗? 一个很菜的问题,imap_open出错,谢谢! 哪位好心大哥提供一下通过pb实现邮件的收发。(天天在线等待) 以下分組匯總如何能實現,望高手指點,在線等待 请问,这个sql语句应该怎么写(ms sqlserver)? 关于select元素取值问题 请哪位网友,给我寄一个Jeode的JAVA虚拟机把,不甚感谢 分不是问题,少了可以再加 如何建立一个对象数组 winexec启动/关闭外部程序的问题 多组数据保存到文件和提取的问题!!(第3遍发问了,帮忙看看啊!)谢谢谢谢!!!!! CRecordSet可以执行SQL语句吗 >>>>>超难度问题<<<<<怎样在屏幕上锁定一个移动的物体并得到它的x,y坐标 用ADO访问数据库时,如何拼写动态SQL 麻烦给发个Jbuilder7的注册机,注册码不会用不要!急! 请问在ASP中调用DLL到底需不需要注册,我怎么看有的需要注册,有的不需要! ASP 0115 ??错误,怎么办?急 OLE 文档序列化!请大虾指教! 双硬盘????,郁闷中。。。在线等 批量数据写入,是否有简捷的方法 请问谁有1、美达S693A2主板光盘;2、还有美达p4vad主板,是什么显卡? 用java weblogic.ejbc编译时为何总报找不到.xml文件 ftp的问题 请问各位:如何在ASP.NET中打开一个现有的或一个新的WORD文档? 讨论怎么发财 关于查询系统的需求分析怎么写?用触摸屏实现 如何把一个文件保存到数据库中? 耦合 哪里有WEB合同管理代码?或资料?演示?急!!!谢谢!有人知道吗?? 谁能把这段代码破解 求一函数,在线等....... 剛&#24478;vb轉delphi,&#24171;我看一看!結貼&#24456;&#24555;! 如何可在WINXP中改MAC?? sprintf(a,"%2X",b)问题 关于简单的access查询 java字符转换问题!!! 请教一个Struts标记问题! 一个cab下载的错误信息解读,请教高人。 OutLook?怎么用它发邮件,经常提示错误? 帮看这段删除纪录代码有什么问题?三层结构oracle 本人要做一个WEB合同管理平台,由于以前没做过,请大家指示? Web Application 中怎么来调用 Web Server?谢谢! DataGrid中模板列嵌套的DataGrid怎样相应其事件 [调查]程序员证在你们公司里到底有多大的作用?有多少人有证?希望有没有证的都进来说一下。 怎样把字符串"C;\aaa\bbb"变成字符串"C:\aaa\ccc\dd"?用什么函数,操作? 我的SQL Server 装好后,出现下面的错误 这个文件查找真是怪!......msdn源代码居然有问题, 进来看看... 请问在TreeView控件中如何通过光标的上下移动获得光标所在项在数据库中的ID值 化学中关于氨基酸个数计算的几个公式 关于耶鲁大学哲学死亡公开课,你有文字版吗?就是可以用WORD打开的,不是字幕,有的话可以发我邮箱吗 一战后苏联国情如何? 这些是如何实现的呢?个体进行思考的能力使他能够作用于宇宙并使宇宙精神彰显出来——————什么才是对 六月二十七日望湖楼醉书雨中景象的诗句的答案 冷水和热水谁沸腾的快? 采样保持器的作用是什么?是否所有模拟量输入通道都需要采样保持器? 必修3生物题 寒带针叶林中的两个动物种群.见图 三极管2sc5200的极性怎么排列,怎样测量参数是否配对? 信号采样中,A/D本身具有保持功能,那是不是不管模拟量在A/D转换时变化多大,都可不加保持器呢?为什么?主要是回答为什么 , 写的是什么季节的景象?从哪看出?如题 氧化钙如何转化为碳酸钙 惯性、动摩擦因数、刹车时间高一物理中如果地面水平,物体以一定初速度只在滑动摩擦力的作用下做匀减速直线运动,其及速度大小a=μg(μ为动摩擦因数,g为重力加速度).如果两辆质量相差 六月二十七日望湖楼醉书描写的是什么的景象 不要告诉我是什么季节的景象 怎么使水尽快沸腾? 两种 快啊! 在一个质量足够大的黑洞内,温度会无限接近于绝对零度,那么,黑洞能否阻止熵增? 在光滑的水平面上,停着一辆平板小车,小车质量为10kg,放置一物块质量为5kg,给物块一冲量30N.s,物体滑行,与固定在平板车上的水平弹簧作用后又弹回,刚好回到原来处静止,物块与车摩擦因素为0. 六月二七日望湖楼醉书诗中描写的景象是什么 请问指纹在多久内会消失我的钱在这两个月间被偷了,怀疑被别人偷了……好心人请帮我回答吧…… 为什么氨基酸数=多肽中氧原子数-1 耶鲁大学公开课哪翻译的好具体说是哪个字幕组翻译的比较好 塑料上的指纹多久会消失,懂得来被雨水淋过咧? 吊鲤鱼草鱼用什么耳料好 耶鲁大学公开课视频都有什么?可以在哪里下载,有翻译的~ 中和滴定为什么要用已知浓度的溶液滴定未知浓度的溶液 如图,平板A长L=2m,厚度可以忽略,质量为M=5kg,放在水平面上.在A的右端放一质量m=2kg的小物体B,已知A与B之间的动摩擦因数μ=0.1.A,B两物体与桌面间的动摩擦因数均为μ=0.2.最初系统静止,现对木板A 求 耶鲁大学公开课:古希腊历史简介全24课中文文本如题 我们身边的生物( )( )( ) 两个电阻串联后接在12v电源上,其中一个电阻阻值为40欧姆,流过电流为0.2A,根据欧姆定律另一个电阻阻值? 功夫熊猫 破烂熊和上译的翻译字幕文档要文档而不是视频.谢谢. Kevin是什么意思? 光滑水平面上有质量为M的长平板A,如图所示,平板上放以光滑水平面上有质量为M的长平板A,平板上放有一质量为m的物体B.A、B之间的动摩擦因数为u,今在物体B上加一水平恒力F,B和A发生相对滑动 入射角是入射光线与法线的夹角还是与反射面的夹角 但基因应该是衰退的过程,具体到人,进化的水平是否出现峰值,然后衰退与消失? 算氨基酸的公式 入射光线与发现的夹角是30°入射角为(),反射光线与法线的夹角为()反射光线与入射光线的夹角为() 什么是4维空间?5维呢?N维呢?估计没人知道,谈谈您自己的想法就好了.物理现象的约束,什么意思? 1917年11月(俄历10月)发生了什么? 要使反射光线和入射光线的夹角为90度,入射角为 反射角为 入射光线与法线的夹角为 反射光线与法线的夹角为 隐性遗传基因(如白化病基因)有可能在遗传的过程中消失吗?最好能举例或者提出证据 极性分子、非极性分子是什么?还有金属键、配位键? 冷水和热水哪个沸腾快 10.(14分)(1) 某植物籽粒颜色是由三对独立遗传的基因共同决定的,10.(14分)(1) 某植物籽粒颜色是由三对独立遗传的基因共同决定的,其中基因型A_B_R_的籽粒红色,其余基因型的均无色.  ①籽 加装增压泵自来水公司会管吗? 沸沸腾腾游很快叫姐姐 黑洞的中心温度有多高? 基因在细胞中究竟有没有物质基础基因究竟是指排列顺序还是. RNA是什么东西? 某人在静水中游泳的速度为根号3a千米每小时,现在他在河岸某人在静水中游泳的速度为根号3a千米每小时,现在他在河宽为s千米,水流速度为a千米每小时的河中游泳,教练要求他以最短的时间从 温度会影响生物的 DNA是什么东西? 为什么说生物多样性是进化的结果?RT. 0.1molNH4NO3与——克KCl混合,与——克KNO3含相等物质的量的钾离子和氮离子 RNA是个玩啥东西?不是DNA是RDA 21、如图9所示,光滑水平面上有一质量为2m的平板小车,在其最右端放一质量为m的物块,已知物块和车面上AC段与BC段的摩擦因数分别为u1 和 u2,当对平板小车施一向右恒力后,物块滑到C点时,速度 沙子烘干机轴承怎么清洗? 用什么东西鉴定DNA?DNA染色体鉴定到哪里去查? 某人在静水中游泳的速度为根号3米每秒,河水自西向东流速为1米每秒,若此人朝正南方向游去则他的实际前进速度为多少 DNA微阵列是什么不要百度百科的 一战后帝国主义国家包围苏联的格局是什么 南桑威奇群岛东部25日发生6.5级地美油轮在尼日利亚遇袭 两人被海盗劫为美元对主要货币汇率24日继续在低位小纽约股市股指24日上涨纽约商品交易所黄金期货市场24日交投美国对中国和印尼产味精发起双反调查美“杀死中国人”节目被删 万人在白宫加拿大魁北克发现丰富稀土矿资源美国官员在社交网站说总统\"坏话\"深秋“平补”有讲究美19岁学生欲徒步闯南极美国少女做小首饰赚大钱大姐109 二姐106 小妹99 英愿广州人爱下厨的传统代代相传擅用其形象 中企遭控告韩泡菜、日和食将入非遗BBC主播再曝性侵英一“大学”批准小狗入学 缴费即获硕证据表明艾滋病儿或可治愈日本进入“胖女时代” 专家称或因对瘦美好的心灵对话平台望城区新康乡集中学习十八届三中全会精湖南省委十届九次全会在长召开湖南省委十届九次全会召开 徐守盛发表埃及反政府武装击落政府军直升机 疑用湖南省委全面深化改革领导小组成立【快讯】湖南省委十届九次全会通过递补因吸毒被女友甩了 携砍刀劫车伤人免费孕检还发误工费长沙重拳打击“黑救护车”怕家人安排相亲 保安申请春节加班两兄弟借嫖娼之名抢劫 回老家在火车上龙湾多措并举引领经济转型台媒:民进党正面临体制空洞化的重大危已婚教官与少女恋爱被告 数万条短信曝教官诱拐17岁少女上床 法官认定两情证严法师:岛内媒体让台湾失去信任中华台北队将出征俄国索契冬奥会 包括台高官年逾七旬不服老 餐叙现场唱《传两岸广播春节大联播 讲述两岸民生民情年货热助推淘宝“登台” 网购交流促两首届闽台少儿歌手大奖赛总决赛在福州举
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘