上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
注册表的API编程
作者:未知 申领版权
2010年11月14日 共有 1454 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    一. 注册表的API编程
    
    关于注册表的知识相信您通过前面专题的介绍已经有了较深入的了解。系统有六个预定义好的关键字,这
    六个关键字是用户或系统访问注册表的入口点。我们常用到的只有前四个关键字。而在编程时我们一般用到只是HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE这两个关键字,因为与应用程序相关的数据存在于这两个关键字下。
    
    许多商品化的软件或专业化的软件在您的机器上首次安装的时候都会通过改写注册表来完成软件的正确安装运行,梦想成为编程高手的你当然需要掌握读写注册表这一技术。利用好注册表会为您的应用程序增色不少。
    
    虽然VB本身提供了四个关于注册表的函数GetSetting,SaveSetting、GetAllSettings、DeleteSetting(这四个函数的使用比较简单读者可以参考VB的联机帮助),但是这四个函数只能在“HKEY_CURRENT_USER\Software\VB and VBA ProgramSettings”下读取、删除、修改键值。对于一般的应用程序利用它们可以达到您的目的,对于特殊的要求利用它们就显的无能为力了。下面举一个例子说明它们的局限性。
    
    熟悉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)。
    下面是应该放到您的模块中的声明部分代码:
    Option Explicit
    ´注册表的入口常量
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003
    ´注册表的访问权限常量
    Public Const KEY_QUERY_VALUE = &H1
    Public Const KEY_SET_VALUE = &H2
    Public Const KEY_CREATE_SUB_KEY = &H4
    Public Const KEY_ENUMERATE_SUB_KEYS = &H8
    Public Const KEY_NOTIFY = &H10
    Public Const KEY_CREATE_LINk = &H20
    Public Const KEY_ALL_ACCESS = &H3F
    ´打开/建立键值的可选项常量
    Public Const REG_OPTION_NON_VOLATILE = 0&
    Public Const REG_OPTION_VOLATILE = &H1
    ´建立新键或打开已存在的键常量
    Public Const REG_CREATED_NEW_KEY = &H1
    Public Const REG_OPENED_EXISTING_KEY = &H2
    ´预先定义的访问注册表的权限常量
    Public Const STANDARD_RIGHTS_ALL = &H1F0000
    Public Const SPECIFIC_RIGHTS_ALL = &HFFFF
    ´API的返回代码常量
    Public Const ERROR_SUCCESS = 0&
    Public Const ERROR_ACCESS_DENIED = 5
    Public 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_LITTLE_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_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Boolean
    End Type
    Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
    End Type
    ´要用到的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:
    Dim phkResult As Long ´保存建立的关键字句柄
    Dim Iresult As Long
    Dim SA As SECURITY_ATTRIBUTES
    Dim 1Create As Long
    ´建立一个指定的关键字
    caII RegCreateKeyEx(HKEY_LOCAL_MACHINE,"Network\MyApi",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 long
    success=RegDeleteKey(HKEY_LOCAL_MACHINE,"Network\MyApi")
    

    

 

相关新闻

您可能对这些感兴趣  

用VB做定时断线程序
VisualBasic中的界面设计原则和编程技巧
VB6.0与Windows API 间的呼叫技巧
制作可以自动隐藏的弹出式菜单
ListBox中的字符串超长显示的解决方法
VB中的Unicode 和 Ansi 格式
优化程序显示速度
Visual Basic 产生渐层的 Form 背景
用VB实现客户——服务器(TCP/IP)
用VB制作注册软件的方法

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》