vb的api编程注册表启动项

上传人:第*** 文档编号:30585905 上传时间:2018-01-30 格式:DOC 页数:10 大小:64.50KB
返回 下载 相关 举报
vb的api编程注册表启动项_第1页
第1页 / 共10页
vb的api编程注册表启动项_第2页
第2页 / 共10页
vb的api编程注册表启动项_第3页
第3页 / 共10页
vb的api编程注册表启动项_第4页
第4页 / 共10页
vb的api编程注册表启动项_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《vb的api编程注册表启动项》由会员分享,可在线阅读,更多相关《vb的api编程注册表启动项(10页珍藏版)》请在金锄头文库上搜索。

1、VB 的 API 编程注册表启动项2007 年 03 月 14 日 星期三 上午 10:43介绍关于注册表编程的 API 函数及其应用实例,使读者朋友何能够将前面学到的注册表知识推广到 VB 编程中,继续向 VB 高手迈进(路漫漫)。后半部分介绍的平面工具条的生成定会使您的程序更“炫”!一. 注册表的 API 编程关于注册表的知识相信您通过前面专题的介绍已经有了较深入的了解。系统有六个预定义好的关键字,这六个关键字是用户或系统访问注册表的入口点。我们常用到的只有前四个关键字。而在编程时我们一般用到只是 HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE 这两个关键字,

2、因为与应用程序相关的数据存在于这两个关键字下。许多商品化的软件或专业化的软件在您的机器上首次安装的时候都会通过改写注册表来完成软件的正确安装运行,梦想成为编程高手的你当然需要掌握读写注册表这一技术。利用好注册表会为您的应用程序增色不少。虽然 VB 本身提供了四个关于注册表的函数GetSetting,SaveSetting、GetAllSettings、DeleteSetting(这四个函数的使用比较简单读者可以参考VB 的联机帮助),但是这四个函数只能在“HKEY_CURRENT_USERSoftwareVB and VBA ProgramSettings”下读取、删除、修改键值。对于一般的应

3、用程序利用它们可以达到您的目的,对于特殊的要求利用它们就显的无能为力了。下面举一个例子说明它们的局限性。熟悉 DOS 操作系统的读者都知道,可以编写一个“Autoexec.bat”的批处理文件来实现某一个应用程序在系统启动的时候自动运行,在 Win95 中我们可以把应用程序的快捷方式放到系统的启动组中来达到同样的效果。但是,假如我需要在我的应用程序首次安装以后就能自动达到这种效果,那该如何呢?其实,注册表中提供了三个这样的键:HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunHKEY_LOCAL_MACHINESoftware

4、MicrosoftWindowsCurrentVersionRunOnceHKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServices这三个键字的区别是:Run:此键字下的应用程序在系统启动的时候会自动运行;RunOnce:此键字下的应用程序在系统下一次启动的时候会自动运行,以后不再运行;RunServices:功能和“Run”一样,只是应用程序被启动的时候不同而已。现在您一定知道该如何利用注册表达到您的要求了。实际上许多安装软件在安装向导完成后要您重新启动才能完成最终的安装。它就是把安装向导所需做的最后工作的程序写到“

5、RunOnce”下实现的。但是,若只利用 VB 本身的那四个函数显然是无法实现此功能的。笔者在实践中通过调用 API 函数很好地解决了VB 本身访问注册表的局限性,并把它做成了一个类模块。所以调用起来非常方便。由于篇幅有限我只能从中抽取一部分来讲,这一部分也是可以独立运行的。读者想要完整的源代码请与我联系(yue_)。下面是应该放到您的模块中的声明部分代码:Option Explicit注册表的入口常量Public Const HKEY_CLASSES_ROOT = &H80000000Public Const HKEY_CURRENT_USER = &H80000001Public Cons

6、t HKEY_LOCAL_MACHINE = &H80000002Public Const HKEY_USERS = &H80000003注册表的访问权限常量Public Const KEY_QUERY_VALUE = &H1Public Const KEY_SET_VALUE = &H2Public Const KEY_CREATE_SUB_KEY = &H4Public Const KEY_ENUMERATE_SUB_KEYS = &H8Public Const KEY_NOTIFY = &H10Public Const KEY_CREATE_LINk = &H20Public Const

7、 KEY_ALL_ACCESS = &H3F打开/建立键值的可选项常量Public Const REG_OPTION_NON_VOLATILE = 0&Public Const REG_OPTION_VOLATILE = &H1建立新键或打开已存在的键常量Public Const REG_CREATED_NEW_KEY = &H1Public Const REG_OPENED_EXISTING_KEY = &H2预先定义的访问注册表的权限常量Public Const STANDARD_RIGHTS_ALL = &H1F0000Public Const SPECIFIC_RIGHTS_ALL =

8、 &HFFFFAPI 的返回代码常量Public Const ERROR_SUCCESS = 0&Public Const ERROR_ACCESS_DENIED = 5Public Const ERROR_NO_MORE_ITEMS = 259返回数值类型常量Public Const REG_NONE = (0)Public Const REG_SZ = (1)Public Const REG_EXPAND_SZ = (2)Public Const REG_BINARY = (3)Public Const REG_DWORD = (4)PubliC ConSt REG_DWORD_LITTL

9、E_ENDIAN = (4)Public Const REG_DWORD_BIG_ENDIAN = (5)Public Const REG_LINK = (6)Public Const REG_MULTI_SZ = (7)Public Const REG_RESOURCE_LIST = (8)Public Const REG_FULL_RESOURCE_DESCRIPTOR = (9)Public Const REG_RESOURCE_REQUIREMENTS_LIST = (10)访问注册表的 API 函数要用到的结构类型Type SECURITY_ATTRIBUTESnLength As

10、LonglpSecurityDescriptor As LongbInheritHandle As BooleanEnd TypeType FILETIMEdwLowDateTime As LongdwHighDateTime As LongEnd Type要用到的 API 函数声明(鉴于篇幅这里只介绍一下各 API 的作用而不再一一列其声明;相关声明请读者查阅 API 浏览器)下面简单地介绍一下这几个 API:RegOpenKeyEx():打开指定的关键字(32 位);RegSetValueEx():在打开的注册表关键字的值域中存储数据;RegCloseKey():释放指定的关键字的句柄;R

11、egQueryValueEx():在注册表中查找与您指定的键值相关的值;RegCreateKeyEx():建立并打开指定的关键字,若已存在则打开它;RegEnumKeyEx():枚举指定的打开注册表关键字的子关键字(32 位);RegEnumKey():同上功能一样,区别在于它是 16 位的;RegEnumValue():每次调用枚举指定的打开注册表关键字的值复制一个带索引的值的名称和数据块;RegDeletekey():删除一个关键字以及它的子关键字;RegDeleteValue():在指定的注册表关键字中删除一个带名字的值。通过调用这些 API 我们可以轻松实现注册表的任意关键字的读取、查

12、询、建立、删除。笔者在这里只打算介绍一下如何建立和删除一个特定的关键字。其它操作读者可以自己去发挥。例如:要在 HKEY_LOCAL_MACHINENetwork 下建一个“MyApi”子键并在它的下面建立一个称为“yx”的值域,把它的值设为“yue1975”。我们应该按如下的方法调用 API:Dim phkResult As Long 保存建立的关键字句柄Dim Iresult As LongDim SA As SECURITY_ATTRIBUTESDim 1Create As Long建立一个指定的关键字caII RegCreateKeyEx(HKEY_LOCAL_MACHINE,Netw

13、orkMyApi,0,REG_OPTION_NON_VOLATILE, _KEY_ALL_ACCESS,SA,phkResult,1Create)1Result=RegSetValueEx(phkResult,yx,0,REG_SZ,yue1975,Clng(Len(yue1975)+1)关闭关键字RegCloseKey phkResult现在用注册表编辑器去查看一下注册表,一定生成了您所需的键值。再例如:现在我想把刚才建立的键值删掉,那您只需如下调用即可:dim success as longsuccess=RegDeleteKey(HKEY_LOCAL_MACHINE,NetworkMyA

14、pi) 二. 用 API 生成平面工具条相信许多 VB 爱好者都曾千方百计地想使自己的工具条像 Word97 中的工具条一样 COOL 起来。往往我们不得不去借用别人做好的 ActiveBar 控件,这样先不说自己的程序变得大了,而且说实话那个控件并不好用。笔者在用 VC5 编程的时候用基类函数 SendMessageLong()、FindWindowEx()轻松实现了这种 COOL 的效果。受此启发在 VB5 中调用这两个 API 也实现了同样的效果。下面是源代码:把以下程序加到您的模块中:-常量声明-Public Const WM_USER = &H400用户自定义消息的起点Public

15、Const TB_SETSTYLE = WM_USER + 56设置工具条风格消息Public Const TB_GETSTYLE = WM_USER + 57取得工具条风格消息Public Const TBSTYLE_FLAT = &H800使工具条 COOL 起来Public Const TBSTYLE_TOOLTTPS = &H100Public Const TBSTYLE_WRAPABLE = &H200Public Const TBSTYLE_ALTDRAG = &H400Public Const TBSTYLE_LIST = &H1000Public Const TBSTYLE_C

16、USTOMERASE = &H2000-API 函数声明-Public Declare Function SendMessageLong Lib user32 Alias SendMessageA (ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,ByVal 1Param As Long) As LongPublic Declare Function FindWindowEx Lib user32 Alias FindWindowExA (ByVal hWnd1 As Long,ByVal hWnd2 As Long,ByVal 1psz1 As String,ByVal 1ps

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 外语文库 > 英语学习

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号