【VB开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了VB开源代码-一种获取关联程序启动路径的方法与实现 - 其它论文的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
孟万化 312000 本文介绍了安装可执行程序修改注册表建立文件关联链表的过程,提出了一种基于文件类型获取关联应用程序启动路径的方法,并给出了用
VB 6.0语言实现的程序
代码。
Windows API;注册表;键;扩展名;路径 TP311 A The method and realization to obtain start route of a relation program MENG Wan-hua The Laboratory Center of Economy and Management Shaoxing College of Arts and Sciences Shaoxing Zhejiang 312000 Abstract: the paper introduces a process of installing executable program which will be used to modify register and building file relation chain and at the same time it brings up a method of obtain start route of a relation program based on file type. at last a program code which will be achieved by language
VB6.0 is given. Key
words: Windows API Registry Key extension association 1 Windows98/2000/XP系统注册表是一个庞大的数据库,容纳了应用程序和计算机系统的全部配置信息、中文Windows操作系统和应用程序的初始化信息、应用程序和
文档的关联关系、硬件设置的说明、状态和属性以及各种信息和数据等,它是Windows计算机行为和能力的数据交换中心,在
系统与应用程序的启动、运行与操作过程中起着重要的作用。
在Windows系统中安装任何外部应用程序都需要在注册表数据库中进行注册,应用程序的安装程序在注册表中建立了一个从文件扩展名到程序安装(启动)路径的链表。
因此,可以利用文件扩展名并对注册表数据库进行访问,获得相关外部程序的安装路径,使用各种编程工具开发的可执行应用软件在任何机器上,不管外部执行程序选择什么样的安装路径,都能自动地搜索到外部可执行程序的启动路径,启动外部可执行程序。
2 ⑴在注册表的根键HKEY_CLASSES_ROOT下,以该应用程序有关的文件扩展名作为键名建立子键。
⑵设置以文件扩展名作为键名的子键的默认值。
⑶在根键HKEY_CLASSES_ROOT下,以以上子键默认值为键名建立子键,同时在该子键下逐级建立下级子键。
⑷在未级子键中设定默认值为该应用程序的安装(启动)路径。
3 应用程序对注册表进行管理、维护或访问的过程,实际上就是建立、修改、删除、读取注册表的键及键值项的过程。
Windows API作为一套功能强大的应用程序接口,
VB、VC、VFP等面向对象的程序
设计语言调用Windows API注册表函数,可以充分地满足Windows应用程序对注册表的不同访问要求。
在
VB中,调用三个Windows API函数来获取
注册表中以外部可执行程序有关的文件扩展名为注册键的有关值,再从键值中获取外部可执 ________________________________________ 基金资助:绍兴市社科研究“十五”规划2004年度重点课题基金资助项目(0571) 行
程序的安装(启动)路径。
这三个函数是:RegOpenKeyEx(打开注册键,并获取句柄);RegQueryValueEx(获取打开的注册键中所含的键名称的值);RegCloseKey(释放已获取的键的句柄)。
具体步骤描述如下: ⑴取与程序相关的文件扩展名。
⑵在注册表的根键HKEY_CLASSES_ROOT中寻找文件扩展名的子键。
⑶在以文件扩展名为键名的子键中获取键值,根据以下三种情况取子键名: ① 对于Microsoft Visual InterDev 6.0,子键名为:键值shellopen with VStudiocommand; ② 对于Microsoft Visual C 6.0,子键名为:键值shellopen with msdevcommand; ③ 对于一般外部可执行程序,子键名为:键值shellopencommand。
⑷在注册表的根键HKEY_CLASSES_ROOT中寻找以⑶子键名为键名的子键,并获取其默认值。
在默认值中含有可执行程序的安装路径及可执行的程序名,格式为: 盘符路径程序主名.EXE参数 ,其中程序主名.EXE也有可能是小写字母。
⑸在⑷获取的默认值中提取启动路径和文件名。
4 用
VB6.0实现基于文件类型获取关联应用程序启动路径和自动启动方法。
首先新建工程,创建应用程序界面Form1,其中有两个标签、两个文本框和三个命令按钮。
文本框text1和text2分别用来输入文件类型的扩展名和显示获取的与文件类型关联的应用程序的安装(启动)路径;命令按钮Command1(标题为“搜索启动路”)单击后搜索文件类型关联的应用程序的安装(启动)路径,命令按钮Command2(标题为“启动路径”)单击后启动关联应用程序,命令按钮Command3(标题为“退出)用于结束工程运行;标签Label1和标签Label2分别用来显示“搜索文件扩展名”和“启动路径”文本信息。
主要程序
代码如下: Dim Pathname As String Const KEY_QUERY_VALUE H1 Const HKEY_CLASSES_ROOT H80000000 Const ERROR_SUCCESS 0 Const REG_SZ 1 Private Sub Command1_Click Dim suffix As String suffixdev As String Dim RegPath As String lpData As String Dim lpReserved As Long lpType As Long Dim phkResult As Long lpcbData As Long Dim lperror As Long Pathname Text2.Text Visual C 6.0相关的文件扩展名列表 suffix bscccppcxxdsmdspdswhhpphxxidlmdpodlrcrctrestlhtli suffixdev pkpvup Visual InterDev 6.0相关的文件扩展名
列表 RegPath . TrimLCaseText1.Text lpReserved 0 lpType REG_SZ phkResult 0 lpData Space128 lpcbData LenlpData 在注册表的根键HKEY_CLASSES_ROOT中
搜索以文件扩展名为键名的子键 lperror RegOpenKeyExHKEY_CLASSES_ROOT RegPath 0 KEY_QUERY_VALUE phkResult 打开文件扩展名指定的子键 If lperror ERROR_SUCCESS Then lperror RegQueryValueExphkResult lpReserved lpType ByVal 0 lpcbData 如果子键打开,获取这一子键值赋给lpData If lperror ERROR_SUCCESS Then lperror RegQueryValueExphkResult lpReserved lpType ByVal lpData lpcbData If TrimlpData Then Command2.Enabled False MsgBox 该扩展名 RegPath 的子键默认值未设置! 32 搜索失败! lperror -1 Else RegPath MidlpData 1 lpcbData End If Else Command2.Enabled False MsgBox 该扩展名 RegPath 未注册! 32 搜索失败! End If RegCloseKey phkResult 释放给定注册键的句柄 If InStrsuffixdev LCaseTrimText1.Text Then RegPath MidRegPath 1 LenTrimRegPath - 1 shellopen with VStudiocommand 获取Visual InterDev6.0安装路径所在的子键 Else If InStrsuffix TrimText1.Text Then RegPath MidRegPath 1 LenTrimRegPath - 1 shellopen with msdevcommand 获取Visual C6.0安装路径所在的子键 Else RegPath MidRegPath 1 LenTrimRegPath - 1 shellopencommand 获取其他外部程序安装路径所在的子键 End If End If 在注册表的根键中搜索变量RegPath值为键名的子键 lperror RegOpenKeyExHKEY_CLASSES_ROOT RegPath 0 KEY_QUERY_VALUE phkResult 打开以RegPath值为键名的子键 If lperror ERROR_SUCCESS Then lperror RegQueryValueExphkResult lpReserved lpType ByVal 0 lpcbData lperror RegQueryValueExphkResult lpReserved lpType ByVal lpData lpcbData If lperror ERROR_SUCCESS Then If InStrlpData rundll32.exe Then Pathname TrimlpData Else find1 InStrlpData .exe find2 InStrlpData .EXE find find1 find2 find1与find2中有一个为0 Pathname MidlpData 1 find 4 If RightPathname 1 Chr34 Then Pathname MidPathname 1 LenPathname - 1 Chr34 End If End If If TrimPathname Then 如果路径为空,给出未安装提示信息 Command2.Enabled False MsgBox 可能没有安装程序 32 启动失败! Else 取得启动路径,“启动程序”按钮可操作,在文本框2中显示启动路径 Command2.Enabled True Label2.Visible True Text2.Visible True Text2.Text TrimPathname End If Else MsgBox 可能没有安装程序 32 启动失败! End If End If Else MsgBox 可能没有安装程序 32 搜索失败! End If RegCloseKey phkResult End Sub 对Command2的Click事件编写有关启动关联应用程序的程序
代码。
在工程中建立一个标准模块,
代码为RegOpenKeyEx、RegQueryValueEx、RegCloseKey三个函数的声明。
5 本文提供了一种基于文件类型获取关联应用程序安装(启动)路径的方法,程序在Windows XP/ME/2000/98操作系统,Visual Basic 6.0环境下调试通过,稍作修改可以嵌入用户开发程序中,生成EXE文件可直接在Windows下运行,也能在软件开发人员用编程工具开发的
软件中调用。
1 孟万化,“Windows 2000/XP注册表编辑器禁止与允许使用的几种主要技术研究”J,《
计算机应用与软件》,20044:123125. 2 曹国均、王健编著,“Windows 2000中文版注册表使用开发与实例”M,北京:清华大学出版社,20005. 3 李善茂、杜大鹏、刘国宏编著,“Visual Basic 6.0高级编程技巧”M,北京:电子工业出版社,20001. 4 郇义鹏、虞水俊,“利用API拦截技术实现串口
通信数据拦截”J,《计算机应用》,2003(11):144145. _____________________________________ 作者简介:孟万化(1962-),男,浙江绍兴人,高级实验师,从事计算机软件开发与应用技术研究. Name: Meng WanHua Gender: Male Professional title : High Experiment teacher Date of Birth: 1962.9 Nationality: Han Educational level: Undergraduate Profession: Computer education Be engaged in the work: Computer education and application study E-mail: mengwanhua163.com