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 25-05-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Abrir fichero en la aplicación que ya está corriendo

Buenas a todos,
Creo que el título no es demasiado explicativo y tampoco sé si este es el sitio más apropiado del foro para hacer la pregunta.

Cuento un poco lo que intento hacer. Tengo mi aplicación desarrollada en Delphi que al iniciarse ejecuta otra aplicación externa (que no es más que una cartografía). Pues bien, esta aplicación externa hace uso de unos ficheros con extensiones propias .wpt, .rte y .rtk.

Yo quiero desde mi aplicación modificar estos ficheros y volver a cargarlos en la aplicación. Para ello he visto en el foro que se hace uso de la api shellexecute.

Pues bien mediante el código siguiente logro abrir el fichero, pero el problema es que me crea una nueva instancia de la aplicación externa y yo lo que quiero es que lo abra sobre la que ya estoy ejecutando.

La sentencia que uso es la siguiente:
Código Delphi [-]
ShellExecute(PHandle,'open',PChar(NombreFichero),nil,nil, SW_SHOW);

¿Alguna idea de como hacer para que se me abra en la instancia que está corriendo?

La cosa es que si lo vuelvo a abrir hay veces que lo hace en la que yo quiero y otras en la que ha abierto nueva y no me crea más instancias.
__________________
"Patientia et constantia taelecum"
Responder Con Cita
  #2  
Antiguo 25-05-2010
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Con ShellExecute no puedes hacer eso, existe ShellExecuteEx dentro del API, pero sinceramente no sé como usarla ni como funciona.

Como opción checa si el programa que abre tus archivos tiene la opción de ejecutar una sola instancia.

Por el momento eso te puedo responder yo, esperemos a los demás compañeros.

Saludos
__________________
Herr Heins Faust
Responder Con Cita
  #3  
Antiguo 25-05-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Hola Faust,

Gracias por tu respuesta, así sé que al menos se entiende lo que pretendo.

Me dejas como posible opción la de limitar el número de instancias del programa. Quizás con esto los ficheros siempre se abran en la misma instancia. No sé como hacerlo, pero investigaré mientras espero alguna otra aportación.

Gracias!
__________________
"Patientia et constantia taelecum"
Responder Con Cita
  #4  
Antiguo 27-05-2010
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Hola de nuevo,

Escribo este post porque he observado algo más sobre el comportamiento de la aplicación externa que uso.

Resulta que si abro el fichero con shellexecute, pero no he "integrado" la aplicación en el panel con SetParent funciona bien y todos los ficheros se abren sobre esta aplicación.

Sin embargo si abro la aplicación, lo "integro" en un panel con SetParent y abro un fichero con ShellExecute, el fichero se abre sobre otra instancia de la aplicación. Si esta nueva instancia la vuelvo a "integrar" en el panel y se vuelve a abrir otro fichero, se abre otra nueva instancia y así sucesivamente.

¿Alguien sabe por qué puede ocurrir esto?

Yo lo que pretendo es que todos los ficheros se me abran sobre la misma instancia de la aplicación.
__________________
"Patientia et constantia taelecum"
Responder Con Cita
  #5  
Antiguo 27-05-2010
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Cita:
Empezado por vejerf Ver Mensaje
Hola de nuevo,

Escribo este post porque he observado algo más sobre el comportamiento de la aplicación externa que uso.

Resulta que si abro el fichero con shellexecute, pero no he "integrado" la aplicación en el panel con SetParent funciona bien y todos los ficheros se abren sobre esta aplicación.

Sin embargo si abro la aplicación, lo "integro" en un panel con SetParent y abro un fichero con ShellExecute, el fichero se abre sobre otra instancia de la aplicación. Si esta nueva instancia la vuelvo a "integrar" en el panel y se vuelve a abrir otro fichero, se abre otra nueva instancia y así sucesivamente.

¿Alguien sabe por qué puede ocurrir esto?

Yo lo que pretendo es que todos los ficheros se me abran sobre la misma instancia de la aplicación.
Eso si sale de mi conocimiento, esperemos a los camaradas del foro
__________________
Herr Heins Faust
Responder Con Cita
  #6  
Antiguo 27-05-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
ShellExecute abre la aplicación correspondiente, es decir, crea una instancia nueva de la misma. Si no deseamos crear otra instancia, no sirve ShellExecute. En este caso deberás estudiar como abre archivos la aplicación en cuestión para realizarlo tu (si admite parámetros, método de comunicación, simular teclas rápidas...)

Si la aplicación admite parámetros de ejecución y estos permiten abrir el fichero, que es lo habitual, un truco puede ser usar CreateProcess para abrir la aplicación pesándole el parámetro adecuado para luego integrar su ventana en tu panel. Cada vez que quieras cargar un archivo nuevo, cierras la aplicación y repites el proceso. En esto también podrías usar ShellExecute pero te da menos control sobre el proceso creado. Este sistema puede servir si la aplicación no tarda mucho en abrir, en caso contrario debes investigar los modos ce comunicarte con ella.

Saludos.

Última edición por escafandra fecha: 27-05-2010 a las 20:45:39.
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
Abrir fichero asociado si la aplicacion ya esta activa. Geta Varios 4 13-03-2009 01:43:51
Saber si Firebird esta corriendo felipe88 API de Windows 2 14-07-2008 15:05:56
Como saber si ya esta corriendo una aplicacion zugazua2001 Varios 2 07-05-2008 17:18:01
Como saber si una aplicacion esta corriendo??? vejerf Varios 1 16-03-2007 13:39:14
verificar si una aplicacion esta corriendo dblx Varios 12 15-12-2006 01:29:31


La franja horaria es GMT +2. Ahora son las 15:13:20.


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