PDA

Ver la Versión Completa : Como saber cuando una aplicación se ha cerrado


duilioisola
24-05-2012, 15:33:15
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!


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:


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

uses Windows, SysUtils, Classes, FileCtrl,shellapi,Forms,math; //interface

implementation

uses
NKPaths, IniFiles, Masks;