PDA

Ver la Versión Completa : Ejecutar aplicación externa


taita
04-08-2005, 02:44:31
Hola a todos:
Alguien me sabría decir cómo puedo ejecutar una aplicación externa (tanto para win98 como XP) de forma que si esta aplicación no existe me permita mostrar un mensaje personalizado?
Por ejemplo iniciar el Word y en el caso de no existir mostrar un mensaje de texto en el block de notas o en el programa de correo por defecto para mandar un mensaje.
Estoy usando Delphi 7 y el comando WinExec(), pero no sé como capturar el posible error al no existir el ejecutable.

WinExec(PChar('word.exe'),SW_SHOWNORMAL);

Muchas gracias.

dec
04-08-2005, 03:40:02
Hola,

Según el SDK (Software Development Kit) de Win32 que se incluye junto a Delphi, precisamente, la función "WinExec" puede devolver "ERROR_FILE_NOT_FOUND" si no se encuentra el programa a ejecutar.

Es cuestión de una condicional, por lo tanto:


if WinExec(PChar('notepad.exe'), SW_SHOWNORMAL) = ERROR_FILE_NOT_FOUND then
ShowMessage(SysErrorMessage(GetLastError));

Respecto de avisar al usuario, creo que con lo de arriba bastaría, pero, haciendo algo como lo siguiente puedes abrir el programa predeterminado en el sistema para esos menesteres y preparar un correo:


procedure TForm1.Button1Click(Sender: TObject);
resourcestring
correo = 'mailto:juanperez@juanperez.com?subject="Asunto"&body="Cuerpo"';
begin
ShellExecute(Self.Handle, 'open', PChar(correo), nil, nil, SW_SHOWNORMAL);
end;

Respecto de abrir el Bloc de notas con un determinado texto, pues, la verdad, ahora mismo no sabría decirte cómo hacerlo, fuera de crear un archivo de texto "al vuelo" y abrirlo con el Bloc de notas, so pena de que pueda hacerse de otra mejor forma.

Por cierto, no dejes de revisar la ayuda de la función "WinExec" así como de "ShellExecute" en donde te digo más arriba: Mira en el menú de Delphi Help > Windows SDK. Y por cierto también, acaso te interese la función "FileExists", puesto que con esta puedes averiguar si un archivo/programa existe.

aranel
04-08-2005, 17:28:50
Yo tengo otra duda sobre esto mismo, estoy trabajando en delphi 5 y en lugar de utilizar winExec intento utilizar ShellExecute, porque tengo que pasarle parametros a la aplicación que llamo. Pero me da un error de que el identificador "ShellExecute" no está definido. Eso porqeu es?? es que no se puede utilizar en delphi 5???

dec
04-08-2005, 18:15:04
Hola,


(...) Pero me da un error de que el identificador "ShellExecute" no está definido. Eso porqeu es?? es que no se puede utilizar en delphi 5???

Desconozco si con Delphi 5 se incluye la unidad "ShellApi", aunque supongo que sí: incluye dicha unidad en alguna de las cláusulas "Uses" del módulo en donde quieras usar "ShellExecute".

Por otro lado es una función del API de Windows, quiere decirse, que, siempre podrías llamar directamente a dicha función sabiendo la librería en que esta se encuentre y la forma de hacerlo, claro está.

taita
06-08-2005, 23:45:57
Gracias Dec por responder.
He probado lo que me sugeriste y si, realmente funciona y justo como yo había pensado.
He estado también revisando la ayuda del SDK y he encontrado unas cuantas cosillas que me han venido de perlas. (Nunca me había fijado que tenía esto en mi máquina!!!)
Gracias de nuevo.