<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      在VFP中調用其他應用程序的實用技術

      [摘要]作者: jlhao ---- 在用VFP進行應用程序設計中,經常需要調用其他的應用程序。這時候我們立即會想到RUN命令。使用RUN命令只需知道應用程序的文件名及其路徑即可。 ---- 下面的示例是以最大化方式啟動Windows目錄下的圖畫板程序并同時打開c:\windows\Bubbles.bm...
      作者: jlhao  

      ---- 在用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文件


      日韩精品一区二区三区高清