1. 程式人生 > >關於在bcb中呼叫外部程式的用法

關於在bcb中呼叫外部程式的用法

1:用system("")執行(簡單,像在CMD命令列一樣)

2:用WinExec()執行

3:用CreateProcess執行

4:用ShellExecute執行.

1)  WinExec()

函式原型: UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow);

引數說明:(啟用的意思是能接受焦點,即標題欄變成藍色)

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

uCmdShow:新的應用程式的執行方式。其取值如下:

SW_HIDE 隱藏

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:[email protected]

並把字型改為藍色有下劃線,然後分別在兩個Label的Click事件中加入以下程式碼:

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

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

OK!試試看,如何?夠酷的吧!

從上面可看出,ShellExecute的功能要強得多,並且可以完全替代WinExec(),事實上,WinExec()也是為了和以前版本相容而保留,所以,我們要儘量使用ShellExecute()。其實在WinAPI中,還有一個函式ShellExecuteEx() ,但其使用複雜,又不支援Windows NT,所以這裡就不作介紹了,有興趣的可以自已查詢WinAPI幫助。

相關推薦

關於在bcb呼叫外部程式用法

1:用system("")執行(簡單,像在CMD命令列一樣) 2:用WinExec()執行 3:用CreateProcess執行 4:用ShellExecute執行. 1)  WinExec() 函式原型: UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow);

QT呼叫外部程式的方法 QProcess類

QT4對於介面程式設計無疑是一個很方便的工具。但是由於它介面開發專項特性,可能導致了某些方面的不足(到目前為止暫時沒有使用到這類複雜功能,所以只能是推測)。這樣當整個程式需要某些功能時,就需要外部模組的支援。為了能夠與外部程式相互聯絡,Qt4提供了強大的外部程式呼叫類。先說說

QT呼叫外部程式的方法

    我做的那個小軟體的圖形介面是基於QT3.2的,在主介面的命令列編輯框輸入命令以後要執行別人已經寫好的可執行檔案。這些可執行檔案執行的時間比較長,在終端上執行時會顯示一些執行的資訊,最後才顯示執行結果。我的介面上有一個文字框,我想把它們在後臺執行過程中的資訊不斷新增到文字框中,相當於實時顯示吧,不過要求

Qt的利用QProcess呼叫外部程式

今天工作中要Qt呼叫記事本來開啟一個檔案。上網查了一下用QProcess用法,一般的QProcess開啟外部程式.exe檔案,下面總結一下,挺簡單的。 int QProcess::execute(const QString &program, const&n

MATLAB呼叫.C程式

需要把 .c  變成 MATLAB 可以識別的程式碼 在MATLAB中進入 .c 檔案所在的當前目錄,然後  mex  BP_General_C.c 。該路徑下生成BP_General_C.mexa64檔案,即為MATLAB可以呼叫的檔案。 mex 

vs2008呼叫matlab3013a程式配置方法

1.在vs2008中建立一個win32控制檯應用程式,; 2.在vs2008中的 “工具”——>“選項”——>"專案與解決方案"——>"VC++目錄"——>右上角選擇"包含檔案",在下面   包含:D:\Program Files\MATLAB\R2013a

Java呼叫外部程式、執行Shell或cmd命令

亦可以使用Runtime呼叫外部程式 public static void main(String []args) throws IOException { List<String> command = new ArrayList<>();

在Python呼叫外部命令

怎麼在Python腳本里呼叫外部命令?(就好像直接輸入在Unix shell中或者windows的命令列裡) 來來來,我給你叨咕叨咕各種方法和各自優缺點: os.system("命令加引數")把命令和引數傳遞給你係統的shell中.用這個命令的好處在於你可以一次執行好多命

winform 呼叫外部程式和多執行緒

1.呼叫外部程式 Process outProcess = new Process(); //初始化 outProcess.StartInfo.File

在ROS呼叫外部連結庫檔案(.so)配置方法

舉例說明吧: 1、建立檔案樹如下: myproject: -include --Interface.h -lib --libInterface.so -src --control.cpp

Java 呼叫外部程式,開啟一個新的程序

背景:java 支援多執行緒,這是絕大多數程式都滿足的必要條件,因為多執行緒個可以增加程式的“吞吐量”,提高使用者對軟體的流暢性體驗。             同時,java程式也支援開啟新的程序,或者叫做java呼叫外部應用程式。這裡的實現方式java提供了兩個類:Proc

BCB用API函式WinExec在BCB內執行外部程式

API(Application Programming Interface,應用程式程式設計介面)是一套用來控制Windows的各個部件(包括從視窗的外觀到為一個新程序分配的記憶體)的外觀和行為的一套預先定義的Windows函式。在某種程度上API很象Windows的底層

關於block呼叫外部基本資料型別變數問題

先看兩種方式的程式碼: - (void)blockDemo1{ __block int num = 10; int *p = &num; NSLog(@"=>%p",p); // 定義一個block

SAP 呼叫外部程式(nco作為服務端)

SAP 的方法(函式)如何用其它語言實現,是SAP的funcation module 如果在外面實現,就是在SAP裡建立一個FM,然後在外面用其它語言,JAVA,.net實現這個方法完成複雜功能。在SAP外部啟動一個服務,這個服務連線SAP的geteway service,當

python呼叫外部程式

轉載地址:  https://www.cnblogs.com/songwenlong/p/5940155.htmla.os.system方法Execute the command (a string) in a subshell. This is implemented by

C#如何呼叫外部程式,及該托盤程式的恢復與隱藏

第一次寫部落格,太OUT了…… 現狀:專案中要呼叫一個外部的應用程式,該程式最小化之後,隱藏在系統托盤中 要求:如果該程式沒有執行,則啟動,如果被隱藏在托盤中,則恢復到使用狀態 看了網上的資料,好多程式碼超級複雜,得碼半天, ShowWindow中的第二個引數: 0,表示隱

python-呼叫外部程式(subprocess模組)

參考:https://www.cnblogs.com/breezey/p/6673901.htmlsubprocess模組是python從2.4版本開始引入的模組。主要用來取代 一些舊的模組方法,如os.system、os.spawn*、os.popen*、commands.

QT 呼叫外部程式

QT呼叫外部程式有下面幾種方法: //1.通過呼叫linux C 函式 system("opt/myApp"); //2.通過QProcess,阻塞呼叫 QProcess::execute("/opt/myApp"); //3.通過QProcess,非阻塞呼叫 QPr

C#呼叫外部exe的使用、呼叫powershell、退出程序、委託和事件

針對幾種情況,簡單總結學習一下竟然找到一個超級簡單的方法呼叫exe檔案程式碼就一句,並且呼叫的效果特別好。加上後面的.WaitForExit()就是為了等呼叫的程式執行完後再執行下面的程式碼,沒有後面的.WaitForExit() 無需等待程式完成後執行程式碼。System.

Qt程式設計呼叫外部程式開啟檔案

QDesktopServices::openUrl ( QUrl::fromLocalFile(fileName) );fileName:檔名,如C:/新建 Microsoft Word 文件.docQUrl::fromLocalFile()一定要用這個方法,因為檔名或路徑中