Colección de citas famosas - Slogan de motivación - delphi ejecuta cmd y regresa

delphi ejecuta cmd y regresa

Si quieres obtener la información desde la consola, puedes echar un vistazo al procedimiento API?RunDosInMemo(const?DosApp:?string;?AMemo:?TMemo);

const

{Establecer el tamaño de ReadBuffer}

ReadBuffer?=?2400;

var

Seguridad:?TSecurityAttributes;

ReadPipe,?WritePipe:?THandle;

start:?TStartUpInfo;

ProcessInfo:?TProcessInformation;

Buffer:?PChar;

BytesRead:?DWord;

Buf:?string;

comenzar

con?Security?do

comenzar

nlength?:=?SizeOf(TSecurityAttributes);

binherithandle?:=?true;

lpsecuritydes?criptor?:=?nil;

end;

{Crear una canalización con nombre para capturar la salida del programa de la consola}

if?Createpipe(ReadPipe,?WritePipe,?@Security,? 0)? Entonces

comenzar

Buffer?:=?AllocMem(ReadBuffer?+?1);

FillChar(Inicio,?Tamañode(Inicio), ?#0 )

{Establecer los atributos de inicio del programa de consola}

con?start?do

begin

cb? :=?SizeOf( inicio);

start.lpReserved?:=?nil;

lpDesktop?:=?nil;

lpTitle?:=? nil;

dwX?:=?0;

dwY?:=?0;

dwXSize?:=?0;

dwYSize?:= ?0;

dwXCountChars?:=?0;

dwYCountChars?:=?0;

dwFillAttribute?:=?0;

cbReserved2?:=?0;

lpReserved2?:=?nil;

hStdOutput?:=?WritePipe;?//Dirigir la salida al WritePipe que creamos

hStdInput?:=?ReadPipe;?//Entrada directa al ReadPipe que creamos

hStdError?:=?WritePipe;//Salida de error directa al WritePipe que creado en

dwFlags?:=?STARTF_USESTDHANDLES?or?STARTF_USESHOWWINDOW;

wShowWindow?:=?SW_HIDE;//Establecer la ventana para ocultar

final;

p>

intenta

{Crear un proceso hijo y ejecutar el programa de consola}

if?CreateProcess(nil,?PChar(DosApp), ?@Seguridad,?@Seguridad, ?verdadero,

p>

NORMAL_PRIORITY_CLASS,

nil,?nil,?start,?ProcessInfo)?luego

comenzar {Esperar a que finalice el proceso}

WaitForSingleObject( ProcessInfo.hProcess,?INFINITE);

{Apague la salida... No la apagué al principio. Como resultado, si no hay salida, el programa morirá. }

CloseHandle(WritePipe);

Buf?:=?'';

{Leer la salida del programa de la consola}

repetir

BytesRead?:=?0;

ReadFile(ReadPipe,?Buffer[0],?ReadBuffer,?BytesRead,?nil);

Búfer [BytesRead]?:=?#0;

OemToAnsi(Buffer,?Buffer);

Buf?:=?Buf?+?string(Buffer);

hasta?(BytesRead?

SendDebug(Buf); {Dividir según nuevas líneas y mostrarse en Memo}

mientras?pos( #10, ?Buf)?>?0?do

comenzar

AMemo.Lines.Add(Copy(Buf,?1,?pos(#10,?Buf)? -?1 ));

Eliminar(Buf,?1,?pos(#10,?Buf));

end;

end;

finalmente

FreeMem(Buffer);

CloseHandle(ProcessInfo.hProcess);

CloseHandle(ProcessInfo.hThread);

CloseHandle(ReadPipe);

end;

end;

end;