La Web del Programador: Comunidad de Programadores
 
    Pregunta:  3844 - EJECUTAR COMANDOS MSDOS DESDE DELPHI
Autor:  Ivan Alexis Abad
Necesito poder ejecutar ordenes de MS-DOS desde Delphi 3 bajo Windows 95/98. La ejecucion de esas ordenes debe ser de forma directa,es decir,sin ponerlas en un archivo bat y ejecutar este con un Winexec o similar.Muchas Gracias de antemano por la respuesta.

  Respuesta:  José Oronas
Function Ejecuta(RutaNombre, Parametros:String; EsperaQueTermine:Boolean;
Prioridad:tPrioridad):THandle;
var
TSI : TStartUpInfo;
TPI : TProcessInformation;
Proc : THandle;
lpExitCode: LongWord;
sRuta : String;
P : Cardinal;
begin
lpExitCode:=High(Longword);
FillChar(TSI,SizeOf(TSI),0);
TSI.wShowWindow := SW_NORMAL;
TSI.dwFlags := StartF_USESHOWWINDOW;

if Parametros = ´´ then sRuta := RutaNombre
else sRuta := RutaNombre+´ ´+Parametros;

Case Prioridad of
tpAlta: P := HIGH_PRIORITY_CLASS;
tpIdle: P := IDLE_PRIORITY_CLASS;
tpNormal: P := NORMAL_PRIORITY_CLASS;
tpTiempoReal: P := REALTIME_PRIORITY_CLASS;
else P := NORMAL_PRIORITY_CLASS;
End;

if CreateProcess(Nil, PChar(sRuta), Nil, Nil, False, P, Nil, Nil, TSI,
TPI) then
Begin
WaitForInputIdle(Tpi.hProcess,10000); // Necesario para que la aplicación termine de cargarse.
// Espera hasta un máximo de 10 segundos.
Proc := TPI.hProcess;
CloseHandle(TPI.hThread);

If EsperaQueTermine Then
Begin
If WaitForSingleObject(Proc, Infinite) <> Wait_Failed
then Result:= 0 // Manejador cero, proceso terminado
Else Result:=lpExitCode; // Error
CloseHandle(Proc);
End
Else
Result:=Proc; // Devolvemos el manejador del proceso.
End
Else
Result:=lpExitCode;
End;