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 24-05-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Como saber cuando una aplicación se ha cerrado

Hola gente!

Esta vez tengo una pregunta difícil... Se trata de que Windows me avise cuando una aplicación se ha cerrado.

Mi aplicación guarda unos documentos. En este caso podrían ser .doc, .xls, .jpg, etc.
Mediante la instrucción ShellExecute(), abro estos archivos con la aplicación que Windows tiene predeterminada para estas extensiones.
Lo que necesito es que una vez se cierren estas aplicaciones, Windows me avise para poder ver si hubo cambios y así poder reemplazar el archivo que tengo en la base de datos.

Desde ya muchas gracias!

Código Delphi [-]
procedure TDMMain.AbreArchivo(ID: integer);
var
   Fichero: string;
begin
   /// Abre un archivo segun el ID

   // Guarda el fichero que esta en el Blob a un archivo y me devuelve ruta+nombre
   Fichero := ObtenerArchivo(ID, AbrirOriginal);
   if (Fichero > '') then
      ShellExecute(FMMain.Handle, nil, PChar(Fichero), nil, nil, SW_SHOW);
end;
Responder Con Cita
  #2  
Antiguo 24-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo recordar que se ha tratado en otras ocasiones, mira a ver si es en alguno de los enlaces del final de esta página
Responder Con Cita
  #3  
Antiguo 24-05-2012
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
idea.

haz un servicio. que monitoree los cambios segun los directorios y extensiones de los archvivos

pon un timer que revize cada cierto tiempo.

y utiliza

Try this page:
http://www.torry.net/pages.php?id=252

The components thet might help you are:
ATFileNotification, DCNotify, DirMonitor, DirWatch, and more.


algo asi le hace el ide de todo lenguaje de programacion
si editas el archivo externamente. avisa que se modifico.
y te pregunta si quieres cargar el archivo con los cambios o
mantener tus cambios hechos en el IDE.
Responder Con Cita
  #4  
Antiguo 24-05-2012
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Lo que necesitas es la rutina "RunAndWait" lanza algo y espera a que se termine para continuar tu programa en el punto que lo dejaste antes de lanzar el runandwait. En los trucos creo que está y si no, en google fijo.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 25-05-2012
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
No me deja editar el mensaje anterior....


Ahora que tengo más tiempo...Aquí va la rutina de la mítica biblioteca NKLIb, archivo NKFiles:

Código Delphi [-]
// devuelve 0 si todo ha ido bien, o GetLastError en caso contrario.
function RunAndWait(   Handle:THandle;
                            Ejecutable,
                            Argumentos:string;
                            const RunDirectory:PChar  =nil;
                            const Visibilidad:Integer = sw_shownormal):dword;
var
   Info:TShellExecuteInfo;
   pInfo:PShellExecuteInfo;
   ExitCodeWORD;
begin
   {Puntero a Info}
   {Pointer to Info}
   pInfo:=@Info;
   {Rellenamos Info}
   {Fill info}
   with Info do
   begin
    cbSize:=SizeOf(Info);
    fMask:=SEE_MASK_NOCLOSEPROCESS;
    wnd:=Handle;
    lpVerb:=nil;
    lpFile:=PChar(Ejecutable);
    {Parametros al ejecutable}
    {Executable parameters}
    lpParameters:=Pchar(Argumentos+#0);
    if RunDirectory = '' then
      lpDirectory:=nil
    else
      lpDirectory:= PChar(RunDirectory+#0);
    nShow:=Visibilidad;
    hInstApp:=0;
   end;
   {Ejecutamos}
   {Execute}
   if not ShellExecuteEx(pInfo) then
    Result:= GetLastError
   else
    Result := Info.hInstApp;

   {Esperamos que termine}
   {Wait to finish}
   repeat
    ExitCode  := WaitForSingleObject(Info.hProcess,500);
    Application.ProcessMessages;
   until (ExitCode <> WAIT_TIMEOUT);
end;

Los uses no los tengo claro, pero tiene todos estos:
Código Delphi [-]
uses Windows, SysUtils, Classes, FileCtrl,shellapi,Forms,math; //interface

implementation

uses
  NKPaths, IniFiles, Masks;
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Saber Cuando ha Terminado De Cargarse La Aplicación sintecsl Varios 3 15-12-2011 06:06:32
Evento para saber cuando se fuerza el cierre de una aplicación APO OOP 1 08-12-2011 14:20:56
Como saber mediante hook cuando se abre o cierra una aplicacion JoAnCa API de Windows 2 15-11-2008 20:05:48
¿Cómo saber que se ha cerrado otro programa que no es tu aplicación? Alcolea Varios 1 09-09-2007 22:55:17
¿Cómo puedo saber desde mi aplicación cuándo se abre por primera vez? nuri Varios 7 21-07-2005 14:07:51


La franja horaria es GMT +2. Ahora son las 14:05:45.


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