winexec |
答題得分者是:ccchen
|
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
引言: 請問我使用winexec('cmd /k aa.exe ',SWHIDE)這是在dos mode解壓縮aa,而aa是使用winrar壓縮,我想請問若我在winexec後在寫一段code,那此段code是會等解壓縮完後才會執行下一段code嗎??用這個試試 第一個參數為執行檔檔名, 第二參數為Command line ExcuteAndWait('cmd.exe','cmd /k aa.exe' ); function ExcuteAndWait(exemodule,commandline:string):Boolean; var ECP:integer; procInfo : TProcessInformation; StartInfo:TStartupInfo; begin FillChar(StartInfo, SizeOf(StartInfo), 0); StartInfo.CB := SizeOf(StartInfo); IF CreateProcess(pchar(exemodule),pchar(commandline),NIL,NIL,False,DETACHED_PROCESS OR NORMAL_PRIORITY_CLASS, NIL, NIL,StartInfo,ProcInfo) THEN BEGIN CloseHandle(ProcInfo.hThread); WaitForInputIdle(ProcInfo.hProcess, 10000); {let process start!} REPEAT Application.ProcessMessages; GetExitCodeProcess(ProcInfo.hProcess, ECP); UNTIL (ECP <> STILL_ACTIVE) OR Application.Terminated; CloseHandle(ProcInfo.hProcess); result:=True; end else result:=False; end; |
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
引言:可是這段code我complier在 GetExitCodeProcess(ProcInfo.hProcess,ECP); 出錯,請問是為什麼??引言: 請問我使用winexec('cmd /k aa.exe ',SWHIDE)這是在dos mode解壓縮aa,而aa是使用winrar壓縮,我想請問若我在winexec後在寫一段code,那此段code是會等解壓縮完後才會執行下一段code嗎??用這個試試 第一個參數為執行檔檔名, 第二參數為Command lineExcuteAndWait('cmd.exe','cmd /k aa.exe' ); function ExcuteAndWait(exemodule,commandline:string):Boolean; var ECP:integer; procInfo : TProcessInformation; StartInfo:TStartupInfo; begin FillChar(StartInfo, SizeOf(StartInfo), 0); StartInfo.CB := SizeOf(StartInfo); IF CreateProcess(pchar(exemodule),pchar(commandline),NIL,NIL,False,DETACHED_PROCESS OR NORMAL_PRIORITY_CLASS, NIL, NIL,StartInfo,ProcInfo) THEN BEGIN CloseHandle(ProcInfo.hThread); WaitForInputIdle(ProcInfo.hProcess, 10000); {let process start!} REPEAT Application.ProcessMessages; GetExitCodeProcess(ProcInfo.hProcess, ECP); UNTIL (ECP <> STILL_ACTIVE) OR Application.Terminated; CloseHandle(ProcInfo.hProcess); result:=True; end else result:=False; end; |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
|
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
如果你的OS是WinNT/Win2K/WinXP/Win .Net
在CreateProcess時, 還要去設Security! <--- 真麻煩
可以參考一下這個, 不過是以BCB實作
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19897 依你的需求, 用ShellExecuteEx 搭配 WaitForSingleObject
或CreateProcess 搭配WaitForSingleObject即可達到
但前者會方便許多, 那不用因為OS不同而要設不同的struct. 比較奇怪的是, 為什麼你要用winexec('cmd /k aa.exe ',SWHIDE)?
依你的寫法, 改成這樣winexec('cmd /c aa.exe ',SWHIDE) 不是比較好嗎?
完全是在背景處理, 作完就作下一步
|
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
引言: 如果你的OS是WinNT/Win2K/WinXP/Win .Net 在CreateProcess時, 還要去設Security! <--- 真麻煩 可以參考一下這個, 不過是以BCB實作 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19897 依你的需求, 用ShellExecuteEx 搭配 WaitForSingleObject 或CreateProcess 搭配WaitForSingleObject即可達到 但前者會方便許多, 那不用因為OS不同而要設不同的struct. 比較奇怪的是, 為什麼你要用winexec('cmd /k aa.exe ',SWHIDE)? 依你的寫法, 改成這樣winexec('cmd /c aa.exe ',SWHIDE) 不是比較好嗎? 完全是在背景處理, 作完就作下一步謝謝你的回答,因為我不熟悉dos command,現在才知道可以下 /c |
ctx62
一般會員 發表:4 回覆:28 積分:6 註冊:2002-12-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |