Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Ejecutar aplicación externa (https://www.clubdelphi.com/foros/showthread.php?t=23979)

taita 04-08-2005 02:44:31

Ejecutar aplicación externa
 
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:

Código Delphi [-]
    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:

Código Delphi [-]
  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,

Cita:

Empezado por aranel
(...) 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
 
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.


La franja horaria es GMT +2. Ahora son las 08:28:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi