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

Run dos command in delphi

尚未結案
winsonsiuhk
一般會員


發表:3
回覆:1
積分:0
註冊:2005-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-18 11:01:38 IP:61.93.xxx.xxx 未訂閱
請問怎様做才可以在delphi中報行一句dos command?? 謝謝各位
nlmnrke
一般會員


發表:5
回覆:16
積分:4
註冊:2004-11-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-18 12:52:23 IP:202.39.xxx.xxx 未訂閱
WinExec(PChar(XXXXXXXXXXXXXXXXXXXXXXXX));
kuei
一般會員


發表:1
回覆:3
積分:0
註冊:2002-05-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-18 20:55:12 IP:218.175.xxx.xxx 未訂閱
以前收集的,作者已經忘記了,可能在這裡找到的。 procedure DosCommand(Command: string; Output: TStrings); var hReadPipe: THandle; hWritePipe: THandle; SI: TStartUpInfo; PI: TProcessInformation; SA: TSecurityAttributes; // SD : TSecurityDescriptor; BytesRead: DWORD; Dest: array[0..1023] of char; CmdLine: array[0..512] of char; TmpList: TStringList; Avail, ExitCode, wrResult: DWORD; osVer: TOSVERSIONINFO; tmpstr: AnsiString; begin osVer.dwOSVersionInfoSize := Sizeof(TOSVERSIONINFO); GetVersionEX(osVer); if osVer.dwPlatformId = VER_PLATFORM_WIN32_NT then begin // InitializeSecurityDescriptor(@SD, SECURITY_DESCRIPTOR_REVISION); // SetSecurityDescriptorDacl(@SD, True, nil, False); SA.nLength := SizeOf(SA); SA.lpSecurityDescriptor := nil; //@SD; SA.bInheritHandle := True; CreatePipe(hReadPipe, hWritePipe, @SA, 0); end else CreatePipe(hReadPipe, hWritePipe, nil, 1024); try Screen.Cursor := crHourglass; FillChar(SI, SizeOf(SI), 0); SI.cb := SizeOf(TStartUpInfo); SI.wShowWindow := SW_HIDE; SI.dwFlags := STARTF_USESHOWWINDOW; SI.dwFlags := SI.dwFlags or STARTF_USESTDHANDLES; SI.hStdOutput := hWritePipe; SI.hStdError := hWritePipe; StrPCopy(CmdLine, Command); if CreateProcess(nil, CmdLine, nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI) then begin ExitCode := 0; while ExitCode = 0 do begin wrResult := WaitForSingleObject(PI.hProcess, 500); // if PeekNamedPipe(hReadPipe, nil, 0, nil, @Avail, nil) then if PeekNamedPipe(hReadPipe, @Dest[0], 1024, @Avail, nil, nil) then begin if Avail > 0 then begin TmpList := TStringList.Create; try FillChar(Dest, SizeOf(Dest), 0); ReadFile(hReadPipe, Dest[0], Avail, BytesRead, nil); TmpStr := Copy(Dest, 0, BytesRead - 1); TmpList.Text := TmpStr; Output.AddStrings(TmpList); finally TmpList.Free; end; end; end; if wrResult <> WAIT_TIMEOUT then ExitCode := 1; end; GetExitCodeProcess(PI.hProcess, ExitCode); CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end; finally CloseHandle(hReadPipe); CloseHandle(hWritePipe); Screen.Cursor := crDefault; end; end;
kuei
一般會員


發表:1
回覆:3
積分:0
註冊:2002-05-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-18 20:56:03 IP:61.219.xxx.xxx 未訂閱
以前收集的,作者已經忘記了,可能在這裡找到的。 procedure DosCommand(Command: string; Output: TStrings); var hReadPipe: THandle; hWritePipe: THandle; SI: TStartUpInfo; PI: TProcessInformation; SA: TSecurityAttributes; // SD : TSecurityDescriptor; BytesRead: DWORD; Dest: array[0..1023] of char; CmdLine: array[0..512] of char; TmpList: TStringList; Avail, ExitCode, wrResult: DWORD; osVer: TOSVERSIONINFO; tmpstr: AnsiString; begin osVer.dwOSVersionInfoSize := Sizeof(TOSVERSIONINFO); GetVersionEX(osVer); if osVer.dwPlatformId = VER_PLATFORM_WIN32_NT then begin // InitializeSecurityDescriptor(@SD, SECURITY_DESCRIPTOR_REVISION); // SetSecurityDescriptorDacl(@SD, True, nil, False); SA.nLength := SizeOf(SA); SA.lpSecurityDescriptor := nil; //@SD; SA.bInheritHandle := True; CreatePipe(hReadPipe, hWritePipe, @SA, 0); end else CreatePipe(hReadPipe, hWritePipe, nil, 1024); try Screen.Cursor := crHourglass; FillChar(SI, SizeOf(SI), 0); SI.cb := SizeOf(TStartUpInfo); SI.wShowWindow := SW_HIDE; SI.dwFlags := STARTF_USESHOWWINDOW; SI.dwFlags := SI.dwFlags or STARTF_USESTDHANDLES; SI.hStdOutput := hWritePipe; SI.hStdError := hWritePipe; StrPCopy(CmdLine, Command); if CreateProcess(nil, CmdLine, nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI) then begin ExitCode := 0; while ExitCode = 0 do begin wrResult := WaitForSingleObject(PI.hProcess, 500); // if PeekNamedPipe(hReadPipe, nil, 0, nil, @Avail, nil) then if PeekNamedPipe(hReadPipe, @Dest[0], 1024, @Avail, nil, nil) then begin if Avail > 0 then begin TmpList := TStringList.Create; try FillChar(Dest, SizeOf(Dest), 0); ReadFile(hReadPipe, Dest[0], Avail, BytesRead, nil); TmpStr := Copy(Dest, 0, BytesRead - 1); TmpList.Text := TmpStr; Output.AddStrings(TmpList); finally TmpList.Free; end; end; end; if wrResult <> WAIT_TIMEOUT then ExitCode := 1; end; GetExitCodeProcess(PI.hProcess, ExitCode); CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end; finally CloseHandle(hReadPipe); CloseHandle(hWritePipe); Screen.Cursor := crDefault; end; end;
系統時間:2024-05-19 15:13:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!