Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-08-2005
Avatar de taita
taita taita is offline
Miembro
 
Registrado: sep 2003
Ubicación: Murcia, San Pedro del Pinatar
Posts: 115
Poder: 21
taita Va por buen camino
Unhappy 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.
__________________
No sabiendo que era imposible... él fue... y lo hizo!!!
En fase de construcción: LoBusco.com más .com que nunca!
Responder Con Cita
  #2  
Antiguo 04-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 04-08-2005 a las 03:41:13. Razón: (corrección del texto)
Responder Con Cita
  #3  
Antiguo 04-08-2005
aranel aranel is offline
Miembro
 
Registrado: jul 2005
Posts: 37
Poder: 0
aranel Va por buen camino
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???
Responder Con Cita
  #4  
Antiguo 04-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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á.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 06-08-2005
Avatar de taita
taita taita is offline
Miembro
 
Registrado: sep 2003
Ubicación: Murcia, San Pedro del Pinatar
Posts: 115
Poder: 21
taita Va por buen camino
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.
__________________
No sabiendo que era imposible... él fue... y lo hizo!!!
En fase de construcción: LoBusco.com más .com que nunca!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:19:33.


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
Copyright 1996-2007 Club Delphi