RUN命令調(diào)用其他的應(yīng)用程序方法

字號(hào):

---- 在用VFP進(jìn)行應(yīng)用程序設(shè)計(jì)中,經(jīng)常需要調(diào)用其他的應(yīng)用程序。這時(shí)候我們立即會(huì)想到RUN命令。使用RUN命令只需知道應(yīng)用程序的文件名及其路徑即可。
    ---- 下面的示例是以化方式啟動(dòng)Windows目錄下的圖畫板程序并同時(shí)打開c:\windows\Bubbles.bmp 文件:
    ---- RUN/n3 C:\Windows\Pbrush.exe c:\windows\Bubbles.bmp 。RUN命令的參數(shù)用法可以參考Visual FoxPro的幫助文件。 但是令人失望的是,在實(shí)際開發(fā)時(shí)我們常常無法確定所需要啟動(dòng)的應(yīng)用程序的文件名及其安裝的路徑。比如我們需要啟動(dòng)用戶機(jī)器上的瀏覽器并連接到某一個(gè)網(wǎng)址,該機(jī)器可能安裝的是IE,也可能是NetScape,還有可能是其他的瀏覽器軟件,安裝的路徑更是無從確定。下面給出我在工作中找到的兩種解決方法,這兩種方法都是通過Win32 API函數(shù)來解決問題,因此其解決思路也可以用到其他編程語言中去。
    ---- (一)從注冊(cè)表中獲取被調(diào)用軟件的名稱及路徑。
    ---- 我們只需要提供被調(diào)用的軟件所處理的文件類型(由文件擴(kuò)展名來確定),即可通過查找注冊(cè)表中該軟件注冊(cè)的可以處理的文件類型的數(shù)據(jù)項(xiàng)來得到該軟件的文件名及安裝路徑 。
    *主函數(shù)
    PROCEDURE lookreg
    Parameter filetype && 文件類型
    * 申明要用到的API 函數(shù)
    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)
    * 確保去掉可執(zhí)行文件后的參數(shù)
    (如: 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
     && 去掉長(zhǎng)文件名前多出的"字符
     m.cAppName = SUBSTR(m.cAppName,2)