VFP中调用其他应用程序的方法.doc_第1页
VFP中调用其他应用程序的方法.doc_第2页
VFP中调用其他应用程序的方法.doc_第3页
VFP中调用其他应用程序的方法.doc_第4页
VFP中调用其他应用程序的方法.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VFP中调用其他应用程序的方法在用VFP进行应用程序设计中,经常需要调用其他的应用程序。这时候我们立即会想到RUN命令。使用RUN命令只需知道应用程序的文件名及其路径即可。下面的示例是以最大化方式启动Windows目录下的图画板程序并同时打开c:windowsBubbles.bmp文件: RUN/n3 C:WindowsPbrush.exe c:windowsBubbles.bmpRUN命令的参数用法可以参考Visual FoxPro的帮助文件。但是令人失望的是,在实际开发时我们常常无法确定所需要启动的应用程序的文件名及其安装的路径。比如我们需要启动用户机器上的浏览器并连接到某一个网址,该机器可能安装的是IE,也可能是NetScape,还有可能是其他的浏览器软件,安装的路径更是无从确定。下面给出我在工作中找到的两种解决方法,这两种方法都是通过Win32 API函数来解决问题,因此其解决思路也可以用到其他编程语言中去。 (一)从注册表中获取被调用软件的名称及路径。我们只需要提供被调用的软件所处理的文件类型(由文件扩展名来确定),即可通过查找注册表中该软件注册的可以处理的文件类型的数据项来得到该软件的文件名及安装路径。*主函数PROCEDURE lookregParameter filetype & 文件类型* 申明要用到的API 函数DECLARE Integer RegOpenKey IN Win32API ;Integer nHKey, String cSubKey,Integer nResultDECLARE Integer RegCloseKey IN Win32API ;Integer nHKeyDECLARE 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,nErrNumLOCAL oReg,regfilecAppKey = cAppName = nCurrentKey = 0nErrNum =GetAppPath(filetype,cAppKey,cAppName)* 确保去掉可执行文件后的参数(如: C:EXCELEXCEL.EXE /e)IF ATC(.EXE,m.cAppName) #0m.cAppName= ALLTRIM(SUBSTR(m.cAppName,1,ATC(.EXE,m.cAppName)+3)IF ASC(LEFT(cAppName,1)=34& 去掉长文件名前多出的字符m.cAppName = SUBSTR(m.cAppName,2)ENDIFENDIFRetu LOWER(m.cAppName)ENDPROC* 打开注册表PROCEDURE OpenKeyLPARAMETER cLookUpKeyLOCAL nSubKey,nErrCodenSubKey = 0m.nRegKey = HKEY_CLASSES_ROOTnErrCode = RegOpenKey(m.nRegKey,m.cLookUpKey,nSubKey)nCurrentKey = m.nSubKeyENDPROC* 关闭注册表PROCEDURE CloseKey=RegCloseKey(nCurrentKey)nCurrentKey =0ENDPROC* 查询注册表PROCEDURE GetKeyvalueLPARAMETER cvalueName,cKeyvalueLOCAL lpdwReserved,lpdwType,lpbData,lpcbData,nErrCodeSTORE 0 TO lpdwReserved,lpdwTypeSTORE SPACE(256) TO lpbDataSTORE LEN(m.lpbData) TO m.lpcbDatam.nErrCode=RegQueryvalueEx(nCurrentKey,m.cvalueName,;m.lpdwReserved,lpdwType,lpbData,lpcbData)m.cKeyvalue = LEFT(m.lpbData,m.lpcbData-1)ENDPROCPROCEDURE GetAppPathLPARAMETER cExtension,cExtnKey,cAppKeyLOCAL cOptNamecOptName = * 得到要打开的文档在注册表中的名称=OpenKey(.+m.cExtension)=GetKeyvalue(cOptName,cExtnKey)=CloseKey()RETURN GetApplication(cExtnKey,cAppKey)ENDPROC* 得到应用程序的安装路径及名称PROCEDURE GetApplicationPARAMETER cExtnKey,cAppKeyLOCAL cOptNamecOptName = =OpenKey(m.cExtnKey+ShellOpenCommand)=GetKeyvalue(cOptName,cAppKey)=CloseKey()ENDPROC- 在使用这段程序时,使用如下格式的语句:- fullpath=lookreg(doc) & 返回打开doc 文件的软件名及安装路径-灵活运用该段程序,可以大大丰富我们在软件中的表现能力,例如应用软件的菜单中都有一项“关于本软件”的功能,该功能调用的表单一般用来显示有关系统资源及软件版权的信息。如果我们要给其中的公司信息加上超文本链接使其可以直接访问公司主页。就可以在显示公司信息的Label控件的 Click 事件中使用如下语句:fullpath=lookreg(htm)If allt(fullpath)= =messagebox( 无法找到浏览器以浏览公司主页!,64,)retuElsefullpath=subst(fullpath,1,rat(.,fullpath)-1)+space(2)+;RUN/n3 &fullpathEndif- (二)利用Windows 的文档关联特性直接调用。-我们知道,Windows是一种面向文档的操作系统。当我们双击某个文件时,Windows就会自动启动与该文件相关联的应用程序来对文件进行处理。在这个过程中Windows主要使用了一个名为ShellExecute的Win32 API函数。我们可以通过这个函数来直接调用其他程序,彻底抛弃Run 命令的方式。Function shellstartParameters documentname* 声明ShellExecute函数DECLARE INTEGER ShellExecute INshell32.DLL INTEGER HWND,;STRING lpszOP, ;STRING lpszFile, ;STRING lpszParams, ;STRING lpszDir, ;INTEGER fsshowcmd* 指定ShellExecute函数的输出指向Windows桌面DECLARE INTEGER GetDesktopWindow IN win32apiHWND = GetDesktopWindow()*指定操作命令为打开方式lpszOP = open* 指定ShellExecute操作的对象为 documentnamelpszFile = documentnamelpszParams = * 指定ShellExecute的缺省目录为c:templpszDir = c:tempfsshowcmd = 0* 执行ShellExecute命令LNRETURN = ShellExecute(HWND, lpszOP,lpszFile, lps

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论