Как вывести результат работы консоли в Memo

Советы » DOS и Консоль » Как вывести результат работы консоли в Memo

procedure

RunDosInMemo(CmdLine: string

; AMemo: TMemo); const

ReadBuffer = 2400; var

Security: TSecurityAttributes; ReadPipe, WritePipe: THandle; start: TStartUpInfo; ProcessInfo: TProcessInformation; Buffer: Pchar; BytesRead: DWord; Apprunning: DWord; begin

Screen.Cursor := CrHourGlass; Form1.Button1.Enabled := False; 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(CmdLine), @Security, @Security, true, NORMAL_PRIORITY_CLASS, nil

, nil

, start, ProcessInfo) then

begin

repeat

Apprunning := WaitForSingleObject (ProcessInfo.hProcess, 100); ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil

); Buffer[BytesRead] := #0; OemToAnsi(Buffer, Buffer); AMemo.Text := AMemo.text + string

(Buffer); Application.ProcessMessages; until

(Apprunning <> WAIT_TIMEOUT); end

; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); end

; Screen.Cursor := CrDefault; Form1.Button1.Enabled := True; end

; procedure

TForm1.Button1Click(Sender: TObject); begin

Memo1.Clear; RunDosInMemo('ping -t 192.168.28.200', Memo1); end

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com