Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->ViualBasic ->正文

VB的API编程精粹(一)

来源:Linuxdby.com 作者:Webmaster 时间:2007-06-05 点击: [收藏] [投稿]
在上篇的中我们介绍了API编程的基础知识和一些比较“酷”的API调用,这期我们将配合专题介绍关于注册表编程的API函数及其应用实例,使读者朋友何能够将前面学到的注册表知识推广到VB编程中,继续向VB高手迈进(路漫漫……)。当然,上期说过要介绍更“酷”的API调用,可不能食言,后半部分介绍的平面工具条的生成定会使您的程序更“炫”!
一.注册表的API编程
关于注册表的知识相信您通过前面专题的介绍已经有了较深入的了解。系统有六个预定义好的关键字,这六个关键字是用户或系统访问注册表的入口点。我们常用到的只有前四个关键字。而在编程时我们一般用到只是HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE这两个关键字,因为与应用程序相关的数据存在于这两个关键字下。
许多商品化的软件或专业化的软件在您的机器上首次安装的时候都会通过改写注册表来完成软件的正确安装运行,梦想成为编程高手的你当然需要掌握读写注册表这一技术。利用好注册表会为您的应用程序增色不少。
虽然VB本身提供了四个关于注册表的函数GetSetting,SaveSetting、GetAllSettings、DeleteSetting(这四个函数的使用比较简单读者可以参考VB的联机帮助),但是这四个函数只能在“HKEY_CURRENT_USER\Software\VBandVBAProgramSettings”下读取、删除、修改键值。对于一般的应用程序利用它们可以达到您的目的,对于特殊的要求利用它们就显的无能为力了。下面举一个例子说明它们的局限性。
熟悉DOS操作系统的读者都知道,可以编写一个“Autoexec.bat”的批处理文件来实现某一个应用程序在系统启动的时候自动运行,在Win95中我们可以把应用程序的快捷方式放到系统的启动组中来达到同样的效果。但是,假如我需要在我的应用程序首次安装以后就能自动达到这种效果,那该如何呢?其实,注册表中提供了三个这样的键:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
这三个键字的区别是:
Run:此键字下的应用程序在系统启动的时候会自动运行;
RunOnce:此键字下的应用程序在系统下一次启动的时候会自动运行,以后不再运行;
RunServices:功能和“Run”一样,只是应用程序被启动的时候不同而已。
现在您一定知道该如何利用注册表达到您的要求了。实际上许多安装软件在安装向导完成后要您重新启动才能完成最终的安装。它就是把安装向导所需做的最后工作的程序写到“RunOnce”下实现的。但是,若只利用VB本身的那四个函数显然是无法实现此功能的。笔者在实践中通过调用API函数很好地解决了VB本身访问注册表的局限性,并把它做成了一个类模块。所以调用起来非常方便。由于篇幅有限我只能从中抽取一部分来讲,这一部分也是可以独立运行的。读者想要完整的源代码请与我联系(yue_xiang@263.net)。
下面是应该放到您的模块中的声明部分代码:
OptionExplicit
'注册表的入口常量
PublicConstHKEY_CLASSES_ROOT=&H80000000
PublicConstHKEY_CURRENT_USER=&H80000001
PublicConstHKEY_LOCAL_MACHINE=&H80000002
PublicConstHKEY_USERS=&H80000003
'注册表的访问权限常量
PublicConstKEY_QUERY_VALUE=&H1
PublicConstKEY_SET_VALUE=&H2
PublicConstKEY_CREATE_SUB_KEY=&H4
PublicConstKEY_ENUMERATE_SUB_KEYS=&H8
PublicConstKEY_NOTIFY=&H10
PublicConstKEY_CREATE_LINk=&H20
PublicConstKEY_ALL_ACCESS=&H3F
'打开/建立键值的可选项常量
PublicConstREG_OPTION_NON_VOLATILE=0&
PublicConstREG_OPTION_VOLATILE=&H1
'建立新键或打开已存在的键常量
PublicConstREG_CREATED_NEW_KEY=&H1
PublicConstREG_OPENED_EXISTING_KEY=&H2
'预先定义的访问注册表的权限常量
PublicConstSTANDARD_RIGHTS_ALL=&H1F0000
PublicConstSPECIFIC_RIGHTS_ALL=&HFFFF
'API的返回代码常量
PublicConstERROR_SUCCESS=0&
PublicConstERROR_ACCESS_DENIED=5
PublicConstERROR_NO_MORE_ITEMS=259
'返回数值类型常量
PublicConstREG_NONE=(0)
PublicConstREG_SZ=(1)
PublicConstREG_EXPAND_SZ=(2)
PublicConstREG_BINARY=(3)
PublicConstREG_DWORD=(4)
PubliCConStREG_DWORD_LITTLE_ENDIAN=(4)
PublicConstREG_DWORD_BIG_ENDIAN=(5)
PublicConstREG_LINK=(6)
PublicConstREG_MULTI_SZ=(7)
PublicConstREG_RESOURCE_LIST=(8)
PublicConstREG_FULL_RESOURCE_DESCRIPTOR=(9)
PublicConstREG_RESOURCE_REQUIREMENTS_LIST=(10)
'访问注册表的API函数要用到的结构类型
TypeSECURITY_ATTRIBUTES
nLengthAsLong
lpSecurityDescriptorAsLong
bInheritHandleAsBoolean
EndType
TypeFILETIME
dwLowDateTimeAsLong
dwHighDateTimeAsLong
EndType
'要用到的API函数声明
…………
(鉴于篇幅这里只介绍一下各API的作用而不再一一列其声明;相关声明请读者查阅API浏览器)
下面简单地介绍一下这几个API:
RegOpenKeyEx():打开指定的关键字(32位);
RegSetValueEx():在打开的注册表关键字的值域中存储数据;
RegCloseKey():释放指定的关键字的句柄;
RegQueryValueEx():在注册表中查找与您指定的键值相关的值;
RegCreateKeyEx():建立并打开指定的关键字,若已存在则打开它;
RegEnumKeyEx():枚举指定的打开注册表关键字的子关键字(32位);
RegEnumKey():同上功能一样,区别在于它是16位的;
RegEnumValue():每次调用枚举指定的打开注册表关键字的值复制一个带索引的值的名称和数据块;
RegDeletekey():删除一个关键字以及它的子关键字;
RegDeleteValue():在指定的注册表关键字中删除一个带名字的值。
通过调用这些API我们可以轻松实现注册表的任意关键字的读取、查询、建立、删除。笔者在这里只打算介绍一下如何建立和删除一个特定的关键字。其它操作读者可以自己去发挥。
例如:要在HKEY_LOCAL_MACHINE\Network下建一个“MyApi”子键并在它的下面建立一个称为“yx”的值域,把它的值设为“yue1975”。我们应该按如下的方法调用API:

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:VB的API编程精粹(二)   下一篇:VB的显示/隐藏Start按钮

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号