---- 在用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)
---- 下面的示例是以化方式啟動(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)

