Obtener el código de salida de la aplicación
Artículo por Club Developers · 11 marzo 2006
3335 vistas
Tendremos que usar la función GetExitCodeProcess del API Win32.
Esta función necesita un handle sobre el proceso del que queremos el código de salida, como el obtenido por CreateProcess o OpenProcess por ejemplo.
Atención: hace falta el handle del proceso, no el de la ventana principal.
Ejemplo con CreateProcess:
Ejemplo con OpenProcess:
Nota: si el proceso está siempre activo, su código de salida es STILL_ACTIVE. Ejemplo de aplicación devolviendo un código de error:
Esta función necesita un handle sobre el proceso del que queremos el código de salida, como el obtenido por CreateProcess o OpenProcess por ejemplo.
Atención: hace falta el handle del proceso, no el de la ventana principal.
Ejemplo con CreateProcess:
delphi
function RunAndGetExitCode ( Const CommandLine: String ): LongWord ; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin FillChar(StartupInfo,SizeOf(StartupInfo),#0); StartupInfo.cb := SizeOf(StartupInfo); if not CreateProcess( Nil, PChar(CommandLine), Nil, Nil, True, 0, Nil, Nil, StartupInfo, ProcessInfo) then RaiseLastOSError; // esperamos a que termine el proceso. WaitForSingleObject(ProcessInfo.hProcess, INFINITE); // recuperamos el código de salida. GetExitCodeProcess(ProcessInfo.hProcess, Result); end;
Ejemplo con OpenProcess:
delphi
function GetExitCode ( Const PID: LongWord ): LongWord ; var hApp: THandle; ExitCode: LongWord; begin hApp := OpenProcess(PROCESS_QUERY_INFORMATION, False, PID); // recuperamos código de salida. GetExitCodeProcess(hApp, Result); end;
Nota: si el proceso está siempre activo, su código de salida es STILL_ACTIVE. Ejemplo de aplicación devolviendo un código de error:
delphi
program StopWithExitCode ; {$APPTYPE CONSOLE} begin // Esta instrucción termina el programa enviando un código de salida. // Por convenio, el 0 se usa para indicar que no se han producido errores. Halt(3); end.