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