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

