導航:首頁 > 編程語言 > c啟動外部程序參數

c啟動外部程序參數

發布時間:2024-10-05 18:20:20

⑴ c++打開外部exe並輸入指令

關於三個SDK函數: WinExec, ShellExecute,CreateProcess 的其他注意事項:
【1】定義頭文件
必須定義以下兩個頭文件:
#include <shlobj.h> // 可替換為 windows.h
#include <shellapi.h>
如果定義了頭文件 #include <windows.h>的話就不必定義 #include <shlobj.h>了。
【2】定義路徑
C++中所表示的路徑要用 " // "而不是平常所用的" / ",所以以上三個函數表示路徑都為:disk://Directory//...//File name
WinExec("D://Program Files//Test//Test.exe",SW_SHOWMAXIMIZED);
ShellExecute(NULL,"open","C://Test.txt",NULL,NULL,SW_SHOWNORMAL);
1、調用API: int system( const char *command );
你可以傳入一命令,啟動某個程序。如"ping www.vccode.com", "YourExe"等等
不過這里有幾點要值得注意:
(1)、他不會立即返回,直到你啟動的程序執行完成。
(2)、如果你啟動是windows程序,它仍然會啟動一個控制台,這就給人感覺太差勁了,但如果本身是控制台的,而且又需要等待它的完成,那這將是比較好的選擇。
(3)、它的返回值代表是否執行成功以及程序的退出碼。
(4)、不能運行*.txt文件或"www..com"

2、調用API:
UINT WinExec(
LPCSTR lpCmdLine, // command line
UINT uCmdShow // window style
);
這個API與API:system同樣的使用簡單,同用是使用命令行型式。
不過它與API:system相比,有幾個優點:
(1)、它將啟動了一個新進程,並且立即返回,因此你的程序無需等待。
(2)、它的多了一個參數:uCmdShow,通過它你可以一定程度上控制項窗體的顯示,比如讓它後台運行而不顯示出來。
(3)、它無論啟動控制台程序還是windows程序都只做你想要做的事。

它的不足之處:
(1)、它完全與本進程脫離,無法對做些必要的控制
(2)、無法得知啟動的程序是否退出。
(3)、得不到啟動的程序的退出碼。
(4)、不能運行*.txt文件或"www..com"
3、調用:
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpVerb,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
它也有WinExec同樣的缺點。
它雖然傳回一個HINSTANCE,但他並不是真正的句柄,我們僅能拿它來做一些錯誤值檢查。

但它的功能比前兩者更強大,它執行系統的Shell命令。
1、2中如果傳入「XX.txt」,它們將不能成功執行,ShellExecute卻能很好地執行,它將啟動一個默認的文字處理程序來打開它。
1、2中如果傳入「www.vccode.com」,將不能成功執行,而ShellExecute卻能很好地執行,它將啟動一個默認瀏覽器來打開這個網站

參數講解:
參數1hwnd:一窗體句柄,將作為啟動的程序的父窗體。
參數2lpVerb:你想執行的操作(edit 、explore、find、open、print、properties),你也可以傳入NULL值,它將執行默認操作(win2000以前與以後處理略有差別,請見MSDN)。
參數3lpFile:一文件名或操作的對象。
參數4lpParameters:如果lpFile是一可執行文件,這個將作為它的參數。它的格式由執行的操作決定。而且當lpFile為一document文件時,此參數需為NULL。
參數5lpDirectory:指定它的工作目錄。
參數6nShowCmd:窗體顯示的控制。

以下是幾個例子:
//啟動一個Dos命令, 啟動windows程序相同
::ShellExecute(this->GetSafeHwnd(), NULL, "ping", "www.vccode.com", NULL, SW_SHOWNORMAL);

//打開一個文件
::ShellExecute(this->GetSafeHwnd(), "open", "ReadMe.txt", NULL, NULL, SW_SHOWNORMAL);
//上面的動詞可傳可不傳,但如果"ReadMe.txt"為"ReadMe.bat"那就得指定,否則將會當命令執行,而不是打開它。

//可打開目錄
::ShellExecute(this->GetSafeHwnd(), "open", "c:", NULL, NULL, SW_SHOWNORMAL);

//可打開網頁
::ShellExecute(this->GetSafeHwnd(), "open", "www.vccode.com", NULL, NULL, SW_SHOWNORMAL);

//瀏覽一個目錄
ShellExecute(handle, "explore", "c:"NULL, NULL, SW_SHOWNORMAL);

//查看一個文件或目錄的屬性
//使用ShellExecuteEx,實現請見所附源碼對應部分

如果沒有特殊的控制要求,它己能為我們做很了,但當我們一定要能控制項這個啟動的進程時,那我們就得使用第4點了。

4:調用API:
BOOL CreateProcess(
LPCTSTR lpApplicationName, // name of executable mole
LPTSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCTSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFO lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
);
往往看到這個函數就讓人生畏,它參數多,而且參數類型也如此莫生。是的,正是因為如此它才功能強大!
但不要怕,作為一般使用,非常簡單!下面便是一個簡單的例子(啟動記事本):

STARTUPINFO StartInfo;
PROCESS_INFORMATION pinfo;
//對程序的啟動信息不作任何設定,全部清0
memset(&StartInfo,0,sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);//設定結構的大小

BOOLret=CreateProcess(
NULL, //啟動程序路徑名
"notepad.exe", //參數(當exeName為NULL時,可將命令放入參數前)
NULL, //使用默認進程安全屬性
NULL, //使用默認線程安全屬性
FALSE,//句柄不繼承
NORMAL_PRIORITY_CLASS, //使用正常優先順序
NULL, //使用父進程的環境變數
NULL, //指定工作目錄
&StartInfo, //子進程主窗口如何顯示
&pinfo); //用於存放新進程的返回信息

⑵ c語言如何 調用外部程序

fe函數名: exec...
功 能: 裝入並運行其它程序的函數
用 法: int execl(char *pathname, char *arg0, arg1, ..., argn, NULL);
int execle(char *pathname, char *arg0, arg1, ..., argn, NULL,
char *envp[]);
int execlp(char *pathname, char *arg0, arg1, .., NULL);
int execple(char *pathname, char *arg0, arg1, ..., NULL,
char *envp[]);
int execv(char *pathname, char *argv[]);
int execve(char *pathname, char *argv[], char *envp[]);
int execvp(char *pathname, char *argv[]);
int execvpe(char *pathname, char *argv[], char *envp[]);
程序例: /* execv example */
#include <process.h>
#include <stdio.h>
#include <errno.h> void main(int argc, char *argv[])
{
int i; printf("Command line arguments:\n");
for (i=0; i<argc; i++)
printf("[%2d] : %s\n", i, argv[i]); printf("About to exec child with arg1 arg2 ...\n");
execv("CHILD.EXE", argv); perror("exec error"); exit(1);
}
多看書,多Google,網路

⑶ 從C程序中循環調用一個外部的exe(需要很多參數),怎樣節省時間

如果「很多參數」是在運行時要從鍵盤輸入,你可以把參數寫入 a.txt

system("prog.exe < a.txt");
程序名 prog.exe
鍵盤參數文件 a.txt
< -- 轉向

如果 有很多程序,很多參數
char prog_name[20][32]; // 程序名 數組
char para_name[20][32]; // 參數文件數組
char my_cmd[80];
int i;

for (i=0;i<20;i++){
....
sprintf(my_cmd,"%s < %s",prog_name[i],para_name[i]);
system(my_cmd);
...

}

⑷ c語言如何 調用外部程序

1. 在調用之前,先聲明和定義函數
2. 根據你函數的參數類表來,填入函數調用時所真正用到的參數來進行調用

例如:要在函數 F(){... } 中調用新增的小程序int FA(int a)和 char FC(char c),按照上面講的:

1.聲明和定義

int
FA(int a){ /*函數功能具體的定義*/};

char
FC(char& c){ ... /*函數功能具體的定義*/};

2 根據函數的聲明,在F()中加以調用

void
F()
{
... ...
int getA = FA(6); //6為int,如果參數是6.001,則會強制轉換成為6
... ...
char getC= FC('a') //a為單個的字元
}

就這樣,簡單吧,去試試吧 :-)

⑸ 如何在C++調用外部程序時傳值

Windows 的話, ShellExecuteEx 可以調用外部程序並附加參數, Linux 不知
另外貌似也可以直接用 System() 直接跑命令行來實現
http://www..com/s?wd=System+C%2B%2B&n=2

閱讀全文

與c啟動外部程序參數相關的資料

熱點內容
ps入門必備文件 瀏覽:348
以前的相親網站怎麼沒有了 瀏覽:15
蘋果6耳機聽歌有滋滋聲 瀏覽:768
怎麼徹底刪除linux文件 瀏覽:379
編程中字體的顏色是什麼意思 瀏覽:534
網站關鍵詞多少個字元 瀏覽:917
匯川am系列用什麼編程 瀏覽:41
筆記本win10我的電腦在哪裡打開攝像頭 瀏覽:827
醫院單位基本工資去哪個app查詢 瀏覽:18
css源碼應該用什麼文件 瀏覽:915
編程ts是什麼意思呢 瀏覽:509
c盤cad佔用空間的文件 瀏覽:89
不銹鋼大小頭模具如何編程 瀏覽:972
什麼格式的配置文件比較主流 瀏覽:984
增加目錄word 瀏覽:5
提取不相鄰兩列數據如何做圖表 瀏覽:45
r9s支持的網路制式 瀏覽:633
什麼是提交事務的編程 瀏覽:237
win10打字卡住 瀏覽:774
linux普通用戶關機 瀏覽:114

友情鏈接