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)
-   -   Como saber cuando una aplicación se ha cerrado (https://www.clubdelphi.com/foros/showthread.php?t=78908)

duilioisola 24-05-2012 15:33:15

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;

Casimiro Notevi 24-05-2012 15:41:51

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 :)

JXJ 24-05-2012 19:10:39

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.

Lepe 24-05-2012 19:55:00

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.

Lepe 25-05-2012 09:17:57

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;
   ExitCode:DWORD;
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;


La franja horaria es GMT +2. Ahora son las 22:59:25.

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