资源描述:
《vfp中调用其他应用程序的方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、VFP中调用其他应用程序的方法在用VFP进行应用程序设计中,经常需要调用其他的应用程序。这时候我们立即会想到RUN命令。使用RUN命令只需知道应用程序的文件名及其路径即可。下面的示例是以最大化方式启动Windows目录下的图画板程序并同时打开c:windowsBubbles.bmp文件:RUN/n3C:WindowsPbrush.exec:windowsBubbles.bmpRUN命令的参数用法可以参考VisualFoxPro的帮助文件。但是令人失望的是,在实际开发时我们常常无法确定所需要启动的应
2、用程序的文件名及其安装的路径。比如我们需要启动用户机器上的浏览器并连接到某一个网址,该机器可能安装的是IE,也可能是NetScape,还有可能是其他的浏览器软件,安装的路径更是无从确定。下面给出我在工作中找到的两种解决方法,这两种方法都是通过Win32API函数来解决问题,因此其解决思路也可以用到其他编程语言中去。(一)从注册表中获取被调用软件的名称及路径。我们只需要提供被调用的软件所处理的文件类型(由文件扩展名来确定),即可通过查找注册表中该软件注册的可以处理的文件类型的数据项来得到该软件的文件名及安装路径
3、。*主函数PROCEDURElookregParameterfiletype&&文件类型*申明要用到的API函数DECLAREIntegerRegOpenKeyINWin32API;IntegernHKey,String@cSubKey,Integer@nResultDECLAREIntegerRegCloseKeyINWin32API;IntegernHKeyDECLAREIntegerRegQueryvalueExINWin32API;IntegernHKey,StringlpszvalueName,In
4、tegerdwReserved,;Integer@lpdwType,String@lpbData,Integer@lpcbData#DEFINEHKEY_CLASSES_ROOT-2147483648#DEFINEC_EXTNOFOUND_LOC"查找失败!"LOCALcExtn,cAppKey,cAppName,nErrNumLOCALoReg,regfilecAppKey=""cAppName=""nCurrentKey=0nErrNum=GetAppPath(filetype,@cAppKey,@cAp
5、pName)*确保去掉可执行文件后的参数(如:C:EXCELEXCEL.EXE/e)IFATC(".EXE",m.cAppName)#0m.cAppName=ALLTRIM(SUBSTR(m.cAppName,1,ATC(".EXE",m.cAppName)+3))IFASC(LEFT(cAppName,1))=34&&去掉长文件名前多出的"字符m.cAppName=SUBSTR(m.cAppName,2)ENDIFENDIFRetuLOWER(m.cAppName)ENDPROC*打开注册表PROCED
6、UREOpenKeyLPARAMETERcLookUpKeyLOCALnSubKey,nErrCodenSubKey=0m.nRegKey=HKEY_CLASSES_ROOTnErrCode=RegOpenKey(m.nRegKey,m.cLookUpKey,@nSubKey)nCurrentKey=m.nSubKeyENDPROC*关闭注册表PROCEDURECloseKey=RegCloseKey(nCurrentKey)nCurrentKey=0ENDPROC*查询注册表PROCEDUREGetKeyv
7、alueLPARAMETERcvalueName,cKeyvalueLOCALlpdwReserved,lpdwType,lpbData,lpcbData,nErrCodeSTORE0TOlpdwReserved,lpdwTypeSTORESPACE(256)TOlpbDataSTORELEN(m.lpbData)TOm.lpcbDatam.nErrCode=RegQueryvalueEx(nCurrentKey,m.cvalueName,;m.lpdwReserved,@lpdwType,@lpbData,
8、@lpcbData)m.cKeyvalue=LEFT(m.lpbData,m.lpcbData-1)ENDPROCPROCEDUREGetAppPathLPARAMETERcExtension,cExtnKey,cAppKeyLOCALcOptNamecOptName=""*得到要打开的文档在注册表中的名称=OpenKey("."+m.cExtension)=GetKeyvalue(cOptName