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

有關WinExec的問題

尚未結案
yx_huang77
一般會員


發表:46
回覆:64
積分:22
註冊:2004-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-02 15:49:45 IP:220.142.xxx.xxx 未訂閱
我寫了以下的程式 Memo1.Clear; WinExec('cmd /c c:\kk.bat',SW_HIDE ); Memo1.Lines.LoadFromFile('c:\tmp'); 在執行 Memo1.Lines.LoadFromFile('c:\tmp'); 出現程序無法存取檔案因為檔案正由另一個程序使用 這該用什麼方式解決 kk.bat內容如下 delete c:\tmp XCOPY D:\930401\HOP3\LABEL1\*.* D:\test\ /s > c:\tmp
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-02 16:15:44 IP:218.163.xxx.xxx 未訂閱
引言: 我寫了以下的程式 Memo1.Clear; WinExec('cmd /c c:\kk.bat',SW_HIDE ); Memo1.Lines.LoadFromFile('c:\tmp'); 在執行 Memo1.Lines.LoadFromFile('c:\tmp'); 出現程序無法存取檔案因為檔案正由另一個程序使用 這該用什麼方式解決 kk.bat內容如下 delete c:\tmp XCOPY D:\930401\HOP3\LABEL1\*.* D:\test\ /s > c:\tmp
function WinExecAndWait(FileName:String; Visibility : integer):Thandle;
var
 zAppName:array[0..512] of char;
 zCurDir:array[0..255] of char;
 WorkDir:String;     StartupInfo:TStartupInfo;
 ProcessInfo:TProcessInformation;
begin
 StrPCopy(zAppName,FileName);
 GetDir(0,WorkDir);
 StrPCopy(zCurDir,WorkDir);
 FillChar(StartupInfo,Sizeof(StartupInfo),#0);
 StartupInfo.cb := Sizeof(StartupInfo);
 StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
 StartupInfo.wShowWindow := Visibility;
 if not CreateProcess(nil,zAppName,nil,nil,false,CREATE_NEW_CONSOLE or
   NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo, ProcessInfo) then
   begin
    Result :=0;
    exit;
   end
 else
   begin
   WaitforSingleObject(ProcessInfo.hProcess,INFINITE); 
   GetExitCodeProcess(ProcessInfo.hProcess,Result);
   end;
end;
....
Memo1.Clear;
WinExecAndWait('cmd /c c:\kk.bat',SW_HIDE);
Memo1.Lines.LoadFromFile('c:\tmp\???'); //檔案是什麼,自己填
網海無涯,學無止境!
yx_huang77
一般會員


發表:46
回覆:64
積分:22
註冊:2004-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-04 15:20:14 IP:218.165.xxx.xxx 未訂閱
如果想要及時將訊息傳回那該從何處下手呢?因為上面的寫法好像要等到批次執行完才看得到結果
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-04 19:44:39 IP:218.163.xxx.xxx 未訂閱
傳回DOS訊息嗎?..網站有範例..自己查一查conundrum大大的文章    網海無涯,學無止境!
yx_huang77
一般會員


發表:46
回覆:64
積分:22
註冊:2004-03-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-04 21:03:26 IP:218.165.xxx.xxx 未訂閱
找不到爺可指點一下嗎
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-04 21:14:35 IP:218.163.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=47504    其他資訊,請多多利用本站..搜尋功能    例如輸入關鍵字「DOS」可以搜尋到更多資訊 < src="http://delphi.ktop.com.tw/download/upload\33223_qoo.gif">網海無涯,學無止境!
yx_huang77
一般會員


發表:46
回覆:64
積分:22
註冊:2004-03-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-04 22:51:00 IP:218.165.xxx.xxx 未訂閱
找過了還是找不到幫幫忙
yx_huang77
一般會員


發表:46
回覆:64
積分:22
註冊:2004-03-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-05 09:02:11 IP:220.142.xxx.xxx 未訂閱
我搜尋了本站有關我提出的問題,但都是執行後將結果導入暫存檔在將他開啟,而我想要的是一執行批次馬上就可看到執行的內容 我的環境是win2000p但也會在win98執行,有誰可幫幫忙嗎
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-05 10:04:34 IP:218.163.xxx.xxx 未訂閱
建議多搜尋...any where src="http://alp.dwp42.org/dwpl2.gif"> 網海無涯,學無止境! 發表人 - qoo1234 於 2004/04/05 10:07:59
yx_huang77
一般會員


發表:46
回覆:64
積分:22
註冊:2004-03-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-04-05 17:05:15 IP:220.142.xxx.xxx 未訂閱
我英文沒那麼厲害可以直接告訴我位置嗎感激不進
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-04-05 20:16:05 IP:218.163.xxx.xxx 未訂閱
引言: 我英文沒那麼厲害可以直接告訴我位置嗎感激不進
加油~ < src="http://delphi.ktop.com.tw/download/upload\33223_qoo.gif">網海無涯,學無止境!
yx_huang77
一般會員


發表:46
回覆:64
積分:22
註冊:2004-03-19

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-04-06 09:59:18 IP:220.142.xxx.xxx 未訂閱
我試了這個,但發現執行XCOPY D:\930401 /S/F D:\test\時,有執行但COPY的資料不完全,且XCOPY的內容都沒顯示出來?我以找不到你說的東東 procedure RunDosInMemo(DosApp:String;AMemo:TMemo); const ReadBuffer = 2400; var Security : TSecurityAttributes; ReadPipe,WritePipe : THandle; start : TStartupInfo; ProcessInfo : TProcessInformation; Buffer : Pchar; BytesRead : DWord; Apprunning : DWord; begin With Security do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe (ReadPipe, WritePipe, @Security, 0) then begin Buffer := AllocMem(ReadBuffer 1); FillChar(Start,Sizeof(Start),#0); start.cb := SizeOf(start); start.hStdOutput := WritePipe; start.hStdInput := ReadPipe; start.dwFlags := STARTF_USESTDHANDLES STARTF_USESHOWWINDOW; start.wShowWindow := SW_HIDE; if CreateProcess(nil,PChar(DosApp),@Security,@Security,true,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,start,ProcessInfo) then begin repeat Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100); Application.ProcessMessages; until (Apprunning <> WAIT_TIMEOUT); Repeat BytesRead := 0; ReadFile(ReadPipe,Buffer[0],ReadBuffer,BytesRead,nil); Buffer[BytesRead]:= #0; OemToAnsi(Buffer,Buffer); AMemo.Text := AMemo.text String(Buffer); until (BytesRead < ReadBuffer); end; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); end; end;
系統時間:2024-05-14 16:44:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!