有三種sdk函式可以呼叫,分別是:
winexec, shellexecute,createprocess
其中以winexec最為簡單,shellexecute比winexec靈活一些,createprocess最為複雜。
winexec
有兩個引數,前乙個指定路徑,後乙個指定顯示方式。
shellexecute
可以指定工作目錄,並且還可以尋找檔案的關聯直接開啟不用載入與檔案關聯的應用程式,shellexecute還可以開啟網頁,啟動相應的郵件關聯傳送郵件等等。
createprocess
一共有十個引數,不過大部分都可以用null代替,它可以指定程序的安全屬性,繼承資訊,類的優先順序等等。如果我們要得到足夠多的關於新的程序的資訊,控制新的程序的細節屬性,若要達到這些目的,就需要使用createprocess函式了。
具體用法如下:
這個函式最簡單,只有兩個引數,原型如下:
uint winexec(
lpcstr lpcmdline,// 命令路徑
uint ucmdshow// 顯示方式,共有11種,具體可以查閱msdn的showwindow函式
);
使用方法如下:
winexec("notepad.exe", sw_show); // 開啟記事本
winexec("d://program files//test//test.exe",sw_showmaximized); // 以最大化的方式開啟test.exe(注意檔名的大小寫也必須完全一樣)
需要注意的是若用sw_showmaxmized方式去載入乙個無最大化按鈕的程式,譬如calc (計算器),就不會出現正常的窗體,但是已經被加到任務列表裡了。
原型如下:
hinstance shellexecute(
hwnd hwnd,//父視窗控制代碼
lpctstr lpoperation,//操作, 開啟方式"edit","explore","open","find","print","null"
lpctstr lpfile,//檔名,前面可加路徑
lpctstr lpparameters,//引數
lpctstr lpdirectory,//預設資料夾
int nshowcmd//顯示方式
);
使用方法如下:
shellexecute(null,"open","c://test.txt",null,null,sw_shownormal); // 開啟c:/test.txt 檔案
shellexecute(null, "open", "http://www.google.com", null, null, sw_shownormal); // 開啟網頁
www.google.com
shellexecute(null,"explore", "d://c++",null,null,sw_shownormal); // 開啟目錄d:/c++
shellexecute(null,"print","c://test.txt",null,null, sw_hide); // 列印檔案c:/test.txt
注意:shellexecute不支援定向輸出。
原型如下:
bool createprocess(
lptstr lpcommandline,// 引數行
//下面兩個引數描述了所建立的程序和執行緒的安全屬性,如果為null則使用預設的安全屬性
lpsecurity_attributes lpprocessattributes,//process security attributes
lpsecurity_attributes lpthreadattributes,// thread security attributes
bool binherithandles,// 繼承標誌
dword dwcreationflags,// 建立標誌
lpvoid lpenvironment,// 環境變數
lpctstr lpcurrentdirectory,// 執行該程序的初始目錄
lpstartupinfo lpstartupinfo,// 用於在建立子程序時設定各種屬性
lpprocess_information lpprocessinformation//用於在程序建立後接受相關資訊
);
使用方法如下:
process_information pi; //啟動視窗的資訊
startupinfo si; //程序的資訊
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wshowwindow=sw_show;
si.dwflags=startf_useshowwindow;
bool fret=createprocess("d://putty.exe",null,null,false,null,null,null,null,&si,&pi);
由此,我就設計了三個按鈕,分別用這三種函式呼叫了三個應用程式,設定在每個按鈕的onclick訊息中:
winexec("taskmgr",sw_normal); //呼叫系統任務管理器
shellexecute(null,"open","c:/readme.txt","","",sw_show); //開啟c盤下的readme檔案
startupinfo si=;
process_information pi;
createprocess(null,"cleanmgr",null,null,false,normal_priority_class,null,null,&si,&pi); //呼叫系統的清理磁碟程式
編譯執行後都通過了,我的對話方塊終於有了一點用處,可以通過單擊按鈕執行一些應用程式了。
從網上看到有人說,使用這三個函式也有一些注意事項:
1、定義標頭檔案
在標頭檔案stdafx.h中必須定義以下兩個標頭檔案:
#include //可替換為windows.h
#include
如果定義了標頭檔案#include的話就不必定義 #include 了,"windows.h" 不光是包含了"shellapi.h",它還定義了許多資料型別,如果沒有這些資料型別,shellapi.h本身會出錯。
2、定義路徑
c++中所表示的路徑要用 " // "而不是平常所用的" / ",所以以上三個函式表示路徑都為:
disk://directory//...//file name
C 中外部程式的呼叫
有三種sdk函式可以呼叫,分別是 winexec,shellexecute,createprocess 其中以winexec最為簡單,shellexecute比winexec靈活一些,createprocess最為複雜。winexec 有兩個引數,前乙個指定路徑,後乙個指定顯示方式。shellexe...
Android中外部程式呼叫方法總結
android中外部程式呼叫方法總結 1.使用自定義action a程式中呼叫的 為 1 intent intent new intent 2 intent.setaction com.test.action.player 3 startactivity intent b程式中的androidman...
C 呼叫外部程式
關於三個sdk函式 winexec,shellexecute,createprocess的其他注意事項 定義標頭檔案 必須定義以下兩個標頭檔案 include 可替換為 windows.h include如果定義了標頭檔案 include 的話就不必定義 include 了。定義路徑 c 中所表示的...