收藏 分销(赏)

VFP中调用其他应用程序的方法.doc

上传人:pc****0 文档编号:8990680 上传时间:2025-03-10 格式:DOC 页数:8 大小:33KB
下载 相关 举报
VFP中调用其他应用程序的方法.doc_第1页
第1页 / 共8页
VFP中调用其他应用程序的方法.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述
VFP中调用其他应用程序的方法 在用VFP进行应用程序设计中,经常需要调用其他的应用程序。这时候我们立即会想到RUN命令。使用RUN命令只需知道应用程序的文件名及其路径即可。 下面的示例是以最大化方式启动Windows目录下的图画板程序并同时打开c:\windows\Bubbles.bmp文件: RUN/n3 C:\Windows\Pbrush.exe c:\windows\Bubbles.bmp RUN命令的参数用法可以参考Visual FoxPro的帮助文件。 但是令人失望的是,在实际开发时我们常常无法确定所需要启动的应用程序的文件名及其安装的路径。比如我们需要启动用户机器上的浏览器并连接到某一个网址,该机器可能安装的是IE,也可能是NetScape,还有可能是其他的浏览器软件,安装的路径更是无从确定。下面给出我在工作中找到的两种解决方法,这两种方法都是通过Win32 API函数来解决问题,因此其解决思路也可以用到其他编程语言中去。 (一)从注册表中获取被调用软件的名称及路径。 我们只需要提供被调用的软件所处理的文件类型(由文件扩展名来确定),即可通过查找注册表中该软件注册的可以处理的文件类型的数据项来得到该软件的文件名及安装路径。 *主函数 PROCEDURE lookreg Parameter filetype && 文件类型 * 申明要用到的API 函数 DECLARE Integer RegOpenKey IN Win32API ; Integer nHKey, String @cSubKey, Integer @nResult DECLARE Integer RegCloseKey IN Win32API ; Integer nHKey DECLARE Integer RegQueryvalueEx IN Win32API ; Integer nHKey, String lpszvalueName, Integer dwReserved,; Integer @lpdwType, String @lpbData, Integer @lpcbData #DEFINE HKEY_CLASSES_ROOT -2147483648 #DEFINE C_EXTNOFOUND_LOC "查找失败!" LOCAL cExtn,cAppKey,cAppName,nErrNum LOCAL oReg,regfile cAppKey = "" cAppName = "" nCurrentKey = 0 nErrNum =GetAppPath (filetype,@cAppKey,@cAppName) * 确保去掉可执行文件后的参数 (如: C:\EXCEL\EXCEL.EXE /e) IF ATC(".EXE",m.cAppName) #0 m.cAppName= ALLTRIM(SUBSTR (m.cAppName,1,ATC(".EXE",m.cAppName)+3)) IF ASC(LEFT(cAppName,1))=34 && 去掉长文件名前多出的"字符 m.cAppName = SUBSTR(m.cAppName,2) ENDIF ENDIF Retu LOWER(m.cAppName) ENDPROC * 打开注册表 PROCEDURE OpenKey LPARAMETER cLookUpKey LOCAL nSubKey,nErrCode nSubKey = 0 m.nRegKey = HKEY_CLASSES_ROOT nErrCode = RegOpenKey (m.nRegKey,m.cLookUpKey,@nSubKey) nCurrentKey = m.nSubKey ENDPROC * 关闭注册表 PROCEDURE CloseKey =RegCloseKey(nCurrentKey) nCurrentKey =0 ENDPROC * 查询注册表 PROCEDURE GetKeyvalue LPARAMETER cvalueName,cKeyvalue LOCAL lpdwReserved,lpdwType, lpbData,lpcbData,nErrCode STORE 0 TO lpdwReserved,lpdwType STORE SPACE(256) TO lpbData STORE LEN(m.lpbData) TO m.lpcbData m.nErrCode=RegQueryvalueEx (nCurrentKey,m.cvalueName,; m.lpdwReserved,@lpdwType,@lpbData,@lpcbData) m.cKeyvalue = LEFT(m.lpbData,m.lpcbData-1) ENDPROC PROCEDURE GetAppPath LPARAMETER cExtension,cExtnKey,cAppKey LOCAL cOptName cOptName = "" * 得到要打开的文档在注册表中的名称 =OpenKey("."+m.cExtension) =GetKeyvalue(cOptName,@cExtnKey) =CloseKey() RETURN GetApplication(cExtnKey,@cAppKey) ENDPROC * 得到应用程序的安装路径及名称 PROCEDURE GetApplication PARAMETER cExtnKey,cAppKey LOCAL cOptName cOptName = "" =OpenKey(m.cExtnKey+"\Shell\Open\Command") =GetKeyvalue(cOptName,@cAppKey) =CloseKey() ENDPROC ---- 在使用这段程序时,使用如下格式的语句: ---- fullpath=lookreg("doc") && 返回打开doc 文件的软件名及安装路径 ----灵活运用该段程序,可以大大丰富我们在软件中的表现能力,例如应用软件的菜单中都有一项“关于本软件”的功能,该功能调用的表单一般用来显示有关系统资源及软件版权的信息。如果我们要给其中的公司信息加上超文本链接使其可以直接访问公司主页。就可以在显示公司信息的 Label控件的 Click 事件中使用如下语句: fullpath=lookreg("htm") If allt(fullpath)= =[] =messagebox(" 无法找到浏览器以 浏览公司主页!",64,"") retu Else fullpath=subst(fullpath,1,rat ([.],fullpath)-1)+space(2)+; ] RUN/n3 &fullpath Endif ---- (二)利用Windows 的文档关联特性直接调用。 ----我们知道,Windows是一种面向文档的操作系统。当我们双击某个文件时,Windows就会自动启动与该文件相关联的应用程序来对文件进行处理。在这个过程中Windows主要使用了一个名为ShellExecute的Win32 API函数。我们可以通过这个函数来直接调用其他程序,彻底抛弃Run 命令的方式。 Function shellstart Parameters documentname * 声明ShellExecute函数 DECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,; STRING lpszOP, ; STRING lpszFile, ; STRING lpszParams, ; STRING lpszDir, ; INTEGER fsshowcmd * 指定ShellExecute函数的输出指向Windows桌面 DECLARE INTEGER GetDesktopWindow IN win32api HWND = GetDesktopWindow() * 指定操作命令为"打开"方式 lpszOP = "open" * 指定ShellExecute操作的对象为 documentname lpszFile = documentname lpszParams = "" * 指定ShellExecute的缺省目录为c:\temp lpszDir = "c:\temp" fsshowcmd = 0 * 执行ShellExecute命令 LNRETURN = ShellExecute(HWND, lpszOP, lpszFile, lpszParams, lpszDir,fsshowcmd) Retu 调用方式: =shellstart("") && 连接到网 =shellstart(“c:\windows\script.doc”) && 打开c:\windows\script.doc文件 ---- 以上程序已经在VFP6.0中文版,Pwin 97中调试通过。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服