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; p>
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;