**自:
今天還是繼續說說c#呼叫系統api啟動外部程式的方法,今天要說的是createprocess這個api函式,相比前兩篇文章(一
、二)中所說的api,createprocess引數要更複雜一些,但使用起來,要更靈活。
1.匯入命名空間
using system.runtime.interopservices;
2. createprocess中用到了幾個結構體型別,先宣告他們:
[system.runtime.interopservices.structlayout(layoutkind.sequential)]public
class
security_attributes
[structlayout(layoutkind.sequential)]
public
struct
startupinfo
[structlayout(layoutkind.sequential)]
public
struct
process_information
3. 宣告createprocess
[dllimport("kernel32.dll
", charset =charset.ansi)]
public
static
extern
bool
createprocess(
security_attributes lpprocessattributes,
security_attributes lpthreadattributes,
bool
binherithandles,
intdwcreationflags,
stringbuilder lpenvironment,
stringbuilder lpcurrentdirectory,
refstartupinfo lpstartupinfo,
refprocess_information lpprocessinformation
);
4. 下邊這三個也是api,作用看注釋
#region win32 api : waitforsingleobject//檢測乙個系統核心物件(執行緒,事件,訊號)的訊號狀態,當物件執行時間超過dwmilliseconds就返回,否則就一直等待物件返回訊號
[dllimport("
kernel32.dll")]
public
static
extern
uint waitforsingleobject(system.intptr hhandle, uint
dwmilliseconds);
#endregion
#region win32 api : closehandle
//關閉乙個核心物件,釋放物件占有的系統資源。其中包括檔案、檔案對映、程序、執行緒、安全和同步物件等
[dllimport("
kernel32.dll")]
public
static
extern
bool
closehandle(system.intptr hobject);
#endregion
#region win32 api : getexitcodeprocess
//獲取乙個已中斷程序的退出**,非零表示成功,零表示失敗。
//引數hprocess,想獲取退出**的乙個程序的控制代碼,引數lpexitcode,用於裝載程序退出**的乙個長整數變數。
[dllimport("
kernel32.dll")]
static
extern
bool getexitcodeprocess(system.intptr hprocess, ref
uint
lpexitcode);
#endregion
5. 如果示例中argm指定的程式執行時間很長,程序會被阻塞到waitforsingleobject行處,直到命令執行完畢或程序被中止才繼續執行後邊的語句。
string argm = "cmd.exe";
startupinfo sinfo = new
startupinfo();
process_information pinfo = new
process_information();
if (!createprocess(null, new stringbuilder(argm), null, null, false, 0, null, null, ref sinfo, ref
pinfo))
uint i = 0
; waitforsingleobject(pinfo.hprocess,
int.maxvalue);
getexitcodeprocess(pinfo.hprocess,
refi);
closehandle(pinfo.hprocess);
closehandle(pinfo.hthread);
C 啟動乙個外部程式 1 WinExec
呼叫win32 api。1.using system.runtime.interopservices 2.define sw hide 0 隱藏視窗,活動狀態給令乙個視窗 define sw shownormal 1 用原來的大小和位置顯示乙個視窗,同時令其進入活動狀態 define sw norm...
使用乙個程式同時啟動多個程式 c
宿舍的肥仔每次開機就需要執行多個程式,他希望乙個程式實現這些事情,所以寫了個程式,大家有什麼意見可以給我提出來,我會多加修改,謝謝,貼上原始碼 using system using system.collections.generic using system.componentmodel usin...
在乙個程式中啟動另外乙個程式
最近剛剛開始工作,發現在學校學習的那些基本上知識打打基礎而已,在實際的專案運作中根本就沒用。革命尚未成功,通知仍需努力啊 嘿嘿 上正題 因為我們需要做乙個類似於監控的系統,這樣的話就涉及到多個程式需要同時執行,並且需要有乙個程式 去控制另外乙個程式,之前沒有做過,也沒見過,不過還好,有一同事之前做過...