如何在C++BUilder裏面調用外部程序 轉

在for DOS的C語言中,有一個system()函數,其功能是執行命令行程序,在Windows程序設計中WinAPI也爲咱們提供了相似的函數,它們就是WinExec()和ShellExecute(),下面就來討論一下這兩個函數的用法。    html

   

 1)WinExec()   函數原型:  shell

   

 UINT   WinExec(LPCSTR   lpCmdLine,UINT   uCmdShow);    函數

   

 參數說明:(激活的意思是能接受焦點,即標題欄變成藍色)    字體

   

 lpCmdLine:以0結尾的字符串,命令行參數。  命令行

   

 uCmdShow:新的應用程序的運行方式。其取值以下:    設計

   

 SW_HIDE   隱藏    htm

   

 SW_MAXIMIZE   最大化    事件

   

 SW_MINIMIZE   最小化,並把Z   order順序在此窗口以後(即窗口下一層)的窗口激活    內存

   

 SW_RESTORE   激活窗口並還原爲初始化大小   SW_SHOW   以當前大小和狀態激活窗口    資源

   

 SW_SHOWDEFAULT   以默認方式運行  

   

 SW_SHOWMAXIMIZED   激活窗口並最大化    

   

 SW_SHOWMINIMIZED   激活窗口並最小化    

   

 SW_SHOWMINNOACTIVE   最小化但不改變當前激活的窗口    

   

 SW_SHOWNA   以當前狀態顯示窗口但不改變當前激活的窗口    

   

 SW_SHOWNOACTIVATE   以初始化大小顯示窗口但不改變當前激活的窗口    

   

 SW_SHOWNORMAL   激活並顯示窗口,若是是最大(小)化,窗口將會還原。第一次運行程序   時應該使用這個值    

   

 好比說,我想要用記事本打開"C:HDC.TXT",以正常方式運行:    

   

 WinExec("notepad   c:\hdc.txt",SW_SHOWNORMAL);    

   

 若是調用成功,這個函數會返回一個不小於31的值,不然調用失敗,其返回值的意義以下:    

   

 0   系統內存或資源不足    

   

 ERROR_BAD_FORMAT   .EXE文件格式無效(好比不是32位應用程序)    

   

 ERROR_FILE_NOT_FOUND   指定的文件設有找到  

   

 ERROR_PATH_NOT_FOUND   指定的路徑沒有找到    

   

 這個函數和system()很是相似,只能運行.EXE文件,這樣在WINDOWS中有它不盡人意的地方,好比不能用此方法經過關聯的方法打開文件,例如WinExec("1.html",SW_SHOWNA);就不能打開此文檔。  

   

 2)ShellExecute()    

   

 函數原型:  

   

 HINSTANCE   ShellExecute(   HWND   hwnd,   LPCTSTR   lpOperation,   LPCTSTR   lpFile,   LPCTSTR   lpParameters,   LPCTSTR   lpDirectory,   INT   nShowCmd   );  

   

 參數說明:    

   

 hwnd   窗口的句柄    

   

 lpOperation   進行的操做,如"open","print","explore"分別對應"打開","打印","遊覽",   也能夠爲空(""),此時表示進行默認的操做。    

   

 lpFile   要操做的文件。    

   

 lpParameters   若是lpFile指定的是一個可執行文件則表示參數    

   

 lpDirectory   操做進行的目錄   nShowCmd   程序的運行方式,其取值見上例。  

   

 若是這個函數調用成功,將返回實例的句柄,若是不成功,返回值包含錯誤信息,因爲類型比較多,這裏就不一一列舉了,詳見WinApi的幫助。    

   

 這樣,上面的例子就能夠改變爲(假設窗口的句柄爲Handle)    

   

 ShellExecute(Handle,"open","notepad","c:\hdc.txt","",SW_SHOWNORMAL);    

   

 其實不用那麼複雜,由於.TXT的關聯程序就是記事本,因此只要這樣就能夠了    

   

 ShellExecute(Handle,"","c:\hdc.txt","","",SW_SHOWNORMAL);    

   

 這個函數和WIN9X中的命令行命令"start"相似,不光能夠對文件進行操做,還能夠對HTTP、MAILTO等進行操做。這樣咱們就能夠設計有超級連接風格的程序了。   例如在VB中,咱們首先聲明此函數(可由VB自帶的API遊覽器獲得):    

   

 Public   Declare   Function   ShellExecute   Lib   "shell32.dll"   Alias   "ShellExecuteA"   (ByVal   hwnd   As   Long,   ByVal   lpOperation   As   String,   ByVal   lpFile   As   String,   ByVal   lpParameters   As   String,   ByVal   lpDirectory   As   String,   ByVal   nShowCmd   As   Long)   As   Long    

   

 而後放置兩個Label,設置其屬性爲:    

   

 Name   lbHomepage   lbEMail   Caption   http://bcbtop.126.com   mailto:hugsnow@126.com    

   

 並把字體改成藍色有下劃線,而後分別在兩個Label的Click事件中加入如下代碼:    

   

 ShellExecute(Me.hWnd,"",lbHomepage.Caption,"","",SW_SHOWNORMAL);    

   

 ShellExecute(Me.hWnd,"",lbEMail.Caption,"","",SW_SHOWNORMAL);    

   

 從上面可看出,ShellExecute的功能要強得多,而且能夠徹底替代WinExec(),事實上,WinExec()也是爲了和之前版本兼容而保留,因此,咱們要儘可能使用ShellExecute()。    

相關文章
相關標籤/搜索