線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:7700
推到 Plurk!
推到 Facebook!

winexec

答題得分者是:ccchen
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-03 16:14:56 IP:61.218.xxx.xxx 未訂閱
請問我使用winexec('cmd /k aa.exe ',SWHIDE)這是在dos mode解壓縮aa,而aa是使用winrar壓縮,我想請問若我在winexec後在寫一段code,那此段code是會等解壓縮完後才會執行下一段code嗎??
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-03 16:26:34 IP:211.20.xxx.xxx 未訂閱
何不將這一些命令寫成批次檔.BAT @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-03 19:01:37 IP:211.22.xxx.xxx 未訂閱
改用 ShellExecuteEx 搭配 WaitForSingleObject 參考這篇 http://www.festra.com/eng/sources.htm 的 Running an external application (and waiting) 一節 也有範例下載。
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-04 08:09:40 IP:61.219.xxx.xxx 未訂閱
引言: 請問我使用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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-04 11:40:54 IP:61.218.xxx.xxx 未訂閱
引言:
引言: 請問我使用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;
可是這段code我complier在 GetExitCodeProcess(ProcInfo.hProcess,ECP); 出錯,請問是為什麼??
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-04 13:17:02 IP:61.219.xxx.xxx 未訂閱
宣告部分改一下(這原是Delphi3時的程式)
function ExcuteAndWait(exemodule,commandline:string):Boolean;
  var ECP:Dword;    
  procInfo : TProcessInformation;    
  StartInfo:TStartupInfo;
begin
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-04 16:12:30 IP:61.218.xxx.xxx 未訂閱
可是我的process為什麼create不起來?? 那我呼叫的cmd要如何結束它??
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-04 19:43:40 IP:211.23.xxx.xxx 未訂閱
如果你的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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-05 08:44:44 IP:61.218.xxx.xxx 未訂閱
引言: 如果你的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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-05-26 19:27:28 IP:218.12.xxx.xxx 未訂閱
See http://www.delphipages.com/tips/thread.cfm?ID=259
系統時間:2024-05-18 6:48:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!