Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Abrir fichero asociado si la aplicacion ya esta activa. (https://www.clubdelphi.com/foros/showthread.php?t=64015)

Geta 12-03-2009 16:01:46

Abrir fichero asociado si la aplicacion ya esta activa.
 
He conseguido, gracias al foro, encontrar la forma de al hacer doble click en un archivo asociado, se ejecute mi aplicación y abra dicho archivo. El problema viene cuando vuelvo hacer doblel click sobre otro archivo pero mi aplicación YA está activa. Intenta crearme otra instancia de mi aplicación. Pues bien, detecto que no se abra otra vez pero ¿como hago para abrir el segundo archivo desde la primera instancia de mi aplicacion, es decir, la que ya estaba corriendo?

La idea es abrir hasta un total de 9 archivos en la misma instancia de la aplicación sin que se ejecute 9 veces la aplicacion, al hacer doblel click sobre los archivos asociados.

gracias

roman 12-03-2009 17:03:02

Si te entiendo bien, ya tienes resuelta la parte de detectar que tu aplicación ya está abierta desde la nueva instancia ¿no? Aparte de eso, lo que necesitarías es pasarle a la primera instancia el parámetro que se le pasó a la nueva instancia -el nombre del archivo. Para ello creo que puedes usar el mensaje WM_COPYDATA. Hace muy poco vi que Zarko Gajic usaba esa técnica en su sitio delphi.about.com. No creo que sea difícil encontrar la referencia.

// Saludos

Geta 12-03-2009 17:12:15

Exactamente, amigo roman, es eso lo que quiero hacer. Y el enlace que me digiste es muy util, pero usa FindWindow para encontrar la primera instancia de mi aplicacion y el nombre de la ventana cambia porque lleva nombre de ficheros. ¿ Hay otra posibiliadad de usar esa forma de mandar datos entre aplicaciones usando Mutex por ejemplo, para identificar la instancia como lo uso para detectar si esta ya en ejecucion ?

roman 12-03-2009 17:27:30

Zarco Gajic menciona el uso de FindWindows pero también hace uso de mutex. Yo tengo una unidad que se ocupa de eso (excepto del paso de parámetros de una instancia a otra), pero en estos momentos mi sitio anda de capa caida y no tengo una copia a mano.

De todas formas, un mutex te sirve para controlar que haya sólo una copia de la aplicación pero no es lo que usarías para pasar parámetros.

----------

Haciendo una revisión, veo que no era con Zarco Gajic donde había visto el uso de WM_COPYDATA. La referencia correcta es este artículo de DelphiDabbler.

Ahí viene muy bien explicado. También usa FindWindow pero de una forma más inteligente, aunque a mi en lo particular no me convence por el trabajo extra que hay que hacer. Pero revisa la parte de WM_COPYDATA.

// Saludos

Geta 13-03-2009 01:43:51

Pues creo que el segundo enlace que has puesto me puede venir muy bien, muchas gracias.


La franja horaria es GMT +2. Ahora son las 14:29:59.

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