您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> VFP >> 辅导 >> 正文    
  在VFP中调用其他应用程序的实用技术 【注册男护士专用博客】          

在VFP中调用其他应用程序的实用技术

www.nanhushi.com     佚名   不详 

---- 在用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)+;
                        [www.flysmart.com]  
        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("www.flysmart.com")    
        && 连接到网站www.flysmart.com
=shellstart(“c:\windows\script.doc”)   
        &&  打开c:\windows\script.doc文件

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。