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

读取和修改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)中有关的文字。
用VisualBasic制作半透明窗体 运行时改变控件大小的两种方法-VB资料 运行中隐藏/显示窗口标题栏-VB资料 在ListBox适当设定水平滚动条的宽度-VB资料 在VB中利用API实现窗体的平滑显示 在vb中让控件大小和位置随着表单的大小成比例变化的方法 在VB中实现闪动标题栏 在VB中实现位图的透明放置 在VB中使用数据窗体设计器插件 在VB中制作单独程序封面的两种方法 在VB中制作透明按钮 在Visual Basic中如何拖动窗体或控件 在Visual Basic中显示动态运行进度 在菜单中加入图标 -VB资料 在程序中调用关闭Windows对话框-VB资料 在任务栏中显示无边框窗体的图标-VB资料 在系统菜单上添加自定义菜单项 -VB资料 在运行时动态生成多个相同的控件?-VB资料 在最小化状态时提供提示 -VB资料 暂时禁止窗口更新-VB资料 VB怎样得到文本框(TextBox)中的文本行数? 制造出透明的Form -VB资料 VB制作半透明窗体和形状不规则的窗体 VB制作方向按钮 VB制作渐变的窗口背景色 字体闪烁 -VB资料 自动改变控件大小-VB资料 自制IE风格按纽控件-VB资料 VB6.0中通过MSChart控件调用数据库 用VB6实现动态增减控件 ActiveX控件的创建-VB资料 FINDING SOMEBODY! 显示器不亮,请帮忙,解决给100分 写在3.15黎明的前夕 **冗余醒目**《如何在输入的时候减小冗余》**冗余醒目** 各位,CSDN的论坛都是用些什么工具开发的?? 请问个位大虾,我的程序为什么不能执行(TC++3.0) 在VC中怎么调用IE来显示一个页面? 怎样在新开的页面给已开的页面上的一个TextBox插入新的字符串 [转贴]网络版权问题 **冗余醒目**《如何在输入的时候减小冗余》**冗余醒目** 用purify测试过的release版本怎么在别人的计算机上运行有问题? 如果用asp连接mysql,请问连接字符串是什么? 我要做一个在小型的对等网上运行的数据库软件,用什么方法好点? 如果用asp连接mysql,请问连接字符串是什么? 请高手帮我解答一个关于在ASP中调用存储过程的问题? 怎么输入繁体字? 足彩-03010期:1033031110310 请教高手在DELPHI里怎样实现把一个文件存储到ORACLE上, 然后又如何调出来使用?? 我快疯了救救我!!!!!!!!!! 我为什么要做个刁民? 屏幕上显示绘多条曲线,要对每条曲线单独进行操作如何实现? 怎样避开程序对softice和trw的检查 想学ACCP不知道社会的认可度? 怎样使用windowsxp/2000的修复程序? C:\winnt\下有一个hh.exe文件,有什么作用? 这首诗我觉得用在程序员身上也很合适 在WebSnap中如何实现gride的隔行显示不同颜色,就象我们现在看到的一样?? 关于《C++ Primer plus(中文版)第四版〉》,大家发表一下看法好吗。 中文文件 颜色代码转换的问题大家帮忙呀.. 程序编译问题 问一个可笑的问题。希望能得到回复 那位用过TfcShapeBtn控件? 急!从NT4到W2000后,为何ASP出错? combustion? 100分有人答了吧 WHERE TO DOWNLOAD??? c#/web,有个约一万行的参数表需用于校验页面录入的数据 帮帮忙啊,急啊 谁有dhtml的中文帮助? 如何使窗口全屏化,即不覆盖Toplevel窗口(winamp),又能覆盖任务栏? 请教各位高手,怎样将网卡的MAC地址与IP地址绑定起来,让用户不能改变? 我自己构造了一个HTTP请求头想要下载swf,但是服务器不接受请求。各位大哥帮忙看一下 简单问题 关于dll的基本问题 求求各位了,急啊(原程序问题) 这段程序问题出在哪儿? 关于防火墙编码的问题500? 明天签约,来问问工资开多少 整一年了 发个帖子吧 win98关机死机具体问题怎样既决????? 这篇文章该怎么解释只管往前走的牛它只管往前走,每个脚步都是深重的,深重地扎在泥土里,每颗汗珠都是结实的,结实地撒落在田野上它只管往前走,前面只有黑褐色的泥土.肩负重扼,在深深的 ]在三角形ABC中,AB=AC=2,BC边上有200个不同德点,P1,P2,…,P200.记Mi=AP的平...]在三角形ABC中,AB=AC=2,BC边上有200个不同德点,P1,P2,…,P200.记Mi=AP的平方i+BPi×PiC(i=1,2,3,…,200)试求M1+M2+…+M200的值. 为什么往水里放洗洁精曲别针会浮起来 求原生质体培养基 CM-Ⅰ、原生质体分离、纯化所用的MR、MPS、CPW配制方法CM-Ⅰ是原生质体培养基,MR、MPS、CPW是原生质体分离纯化(双界面悬浮法)时用的,求这些溶液(CM-Ⅰ、MR、MPS、CPW)的 如图,△ABC中,AB=AC=2,BC边上有10个不同的点P1...如图,△ABC中,AB=AC=2,BC边上有10个不同的点P1,P2,…P10,记Mi=APi2+PiB•PiC(i=1,2,…,10),那么,M1+M2+…+M10=_____,m1=_____ 汽车CAN是怎么控制DVD开关的? 植物体细胞杂交的第一步是去除细胞壁,分离出有活力的原生质体,目前比步骤最常用的是酶解法,也就是在温植物体细胞杂交的第一步是去除细胞壁,分离出有活力的原生质体,目前比步骤最 .∠ABC内有一点P,在BA,BC边上各取一点P1,P2,使△PP1P2的周长最小 汽车车窗安全开关能控制什么 植物组培中要用酶解法去除细胞壁吗 只用胶头滴管和试管无法分别的是A KOH溶液和ALCL3溶液 BMgcl2溶液和氨水CNaAl(oH)4溶液和盐酸 DNa2Co3溶液和盐酸请说明理由 形容一个人不怕困难、勇于进取、实现价值,用什么成语表示? 钢铁和石头都属于哪种物理属性 Al2(SO4)3和盐酸, 只用试管和胶头滴管能鉴别么,为什么 形容一个人不怕困难、勇于进取,最终实现了个人价值,用什么成语表示? 线段ab=40mm,在直线ab上画线段bc=16mm,d是ac的中点,求cd的长度 受日本和辐射影响,不知道以后什么物品会大幅上涨?就像前几天的盐一样,人们想疯了一样抢购,日本不还没乱 国人倒先乱了.各位说说各自的看法 积累表现人不怕困难、意志顽强的成语. 物理钢铁重量怎么求物理钢铁公式 哈柏定律怎样证明宇宙大爆炸哈柏定律是怎样证明宇宙大爆炸或者宇宙在膨胀的,不要太复杂, 表现人不怕困难意志顽强的成语 战斗机 音障那个F14突破音障的时候为什么会解体?现在战斗机的速度不都是1点几倍的音速么,为什么没有事?还有战斗机突破音障那一瞬间是不是周围都有气流?战斗机突破音障的时候是不是什 我们现在这个宇宙的物理定律只是现在用,宇宙大爆炸之前的物理是怎么样的? 电缆面积怎么算? 穿越音障瞬间.大家都知道当战斗机跨越声速的一瞬间会产生音爆这种震耳欲聋的巨响,但战斗机周围的那一团锥型的雾是怎么会事,是只要物体运动速度穿越音障都会看到么?(排除大气层外) 为什么说宇宙大爆炸时期所有科学定律预见未来的能力都消失了 如何排列字的顺序?字有:郭 黄 林 赵 丁 安 色 苏 陈 杨 周 胡 张 王 罗 朱 高 肖1.按音序排列它们的顺序2.按部首笔画由少到多的顺序排列3.按每个字总笔画数又少到多的顺序排列(若总笔画数 所谓音障发生的原理rt所谓战斗机音障发生的原理 问角二的大小并说明理由 在word中如何把字排列成图形 已知:如图,AB//DC,AB=DC,O是DB上一点,过点O的直线分别交DA和BC的延长线于点E、F.求证:∠E=∠F 一杯水最多能放多少回形针? 这样的梦境有什么寓意?这些天睡眠一直不好,晚上总是做梦.早上起来知道做梦过,但都记不住.记得有次梦到在有水的地方一直被人追杀,而且是在古代,一直在奔跑.今天从闭眼睛开始开始脑袋 已知四棱锥P-ABCD的底面为直角梯形,AB平行DC,角DAB=90°,PA垂直底面ABCD且PA=AD=DC=1/2AB=1M是PB中点(1)求点B到平面MAC的距离(2)求二面角M-AC-B大小上图错了 (1)点M,N分别在正三角形ABC的BC,AC边上,且BM=CN,AM,BN交于点Q,说明∠BQM=60°凑合凑合看吧,本来下面还有一小题的但太晚了,只能写一题,如果有人知道后面一题的题目一起答吧 上下组合成字 忘记的反义词是什么 CuCO3和Cu(OH)2的混合物22.2g,可恰好完全溶于100毫升,4摩尔每升的盐酸溶液中加热分解等量的这种混合物可得CuO的质量多少克? 帮我判断一下,说明理由最好, 忘的反义词是什么 如图,在直角梯形ABCD中,AB//CD,DA⊥AB,CD=2,AB=3,AD=7,在AD上能否找到一点P,使三角形PAB和三角行P 谁能帮我详细解释下寸和磅大概有多大?好评,谢谢! 生物上说的植物可以进行离体培养,但要有培养基,请问培养基该怎样配? 假文盲的作文怎么写. 为什么纸折的青蛙可以跳呢?解释一下原理,谢谢!~如果好的话,我会再加50的财富悬赏!~ 红曲霉的原生质体诱变成功后,通过什么培养基进行培养?RT 假文盲作文怎么写 怎么做纸青蛙 我想把应急灯加个开关,就是断电之后可以控制灯的开关,我应改怎么弄. 已知静水速度、水速求路程 (快的话. 请问纸青蛙怎么折? 消防应急灯拔掉电源后灯亮,求方法使灯熄灭.有没有开关直接关了它 我搭的鸡舍共三层,上一层养鸽子,下面两层养鸡,这样可以吗? 纸青蛙怎么叠?就是小时候玩的折纸青蛙,蛮小的,一按还能跳很高(30-40CM呢).初中还会来着 汗~~ 现在忘了. 谁会的话教下吧~~~ 谢谢了~~~~~前几楼的可以叠,但是跳不起来. 呵呵 是我太笨了吧 端盖的冲压模具设计 冬天小户养鸡怎么给鸡舍加温 母爱可以拯救一切,母爱可以包容一切,母爱可以什么,母爱可以什么 ,母爱可以什么,母爱可以什么作文. 有没有做冲压模具设计的朋友 母爱可以拯救一切是谁写的? 回形针会沉到水里的理由马上就要交了! 南京财政局谈政府采购“挑贵的买”:综南京中小河治理工程将收官:14条河流苏州小朋友上演变装T台秀迎接万圣节马来西亚副首相为选举造势 出席者可获日本内阁官房副长官力挺《特定秘密保护数据显示中国赴美名校留学生每4人就有韩称中韩2014年起联手管制黄海非法法国数百活动人员斗牛场前集结 抗议斗韩国“科学技术卫星3”号抵达俄罗斯 500万叙利亚人在国内成难民 冲突严新警方樟宜机场缴7.1公斤冰毒 一外阿富汗总统选举唯一女候选人被取消竞选澳85岁志愿者因慈善工作获得“默多克韩国自主研发太空观测卫星抵俄基地 拟新加坡建房局凭借公共住房项目获得国际阿富汗总统选举唯一女候选人被取消竞选巴西男子计划耗时8个半月穿夹脚拖走遍马副首相为选举造势 出席者可获得小鸡法国数百活动人员斗牛场前集结 抗议斗东京惊现旧日军哑弹 实施爆破超过千人澳大利亚一墓园将举行恐怖派对迎接万圣专偷买菜人 两“菜场大盗”受刑罚女教师不慎落水好男儿奋勇施救淮北:老师举报副校长让学生“裸奔”安庆望江一男子回老家探亲蹊跷失踪(图合肥老小区私拉电线成“网”令人堪忧(曲阳地税局打造“主题文化长廊”提升文如果生二胎,我坚决不做“中国妈妈”!邂逅一场时尚版的“冰雪奇缘”保护前列腺的方式以及6种有益食物周四股市三大锦囊:看过不再心慌慌!三大信号暗示将有狂暴拉升!产科护士爆料陪产丈夫们的各种囧事,笑咨询 | 如何有效证明事实劳动关系?恒大年薪曝光:郜林新约700万 三将中国什么地方的人智商最高【汽修教育】爱心无限进农家 情系山区贫困生官方:驾考单项科目排队积压考生可选省美国一男子为骗取450万保险金推妻子女人生完孩子后的胸部,都变成了什么样人生只有7天假盐就在身边,6招教你辨真伪!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘