Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-01-2008
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
Ceder Hinstance de la aplicación

Para una aplicación necesito tener abierta solo una instancia. Pero si intento abrir otra, lo que debe hacer es pasar los parámetros de esta última a la primera y si es posible cederle su Hinstance, para luego, cerrarse. De forma que para todos los efectos solo existe una Hinstance que aunque pertececía a la segunda abierta, ahora apunta a la primera.


Saludos.
Responder Con Cita
  #2  
Antiguo 14-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Deberas hacer una busqueda en el foro pues el caso ya se ha visto; pero como adelanto de doy las ideas;

1. Puedes buscar la aplicación con FindWindow; si la encuentras significa que tu aplicación ya esta corriendo; entonces le pasas los parametros por SendMessage.

2. Puedes crear un File-Mapping con CreateFileMapping con un lpName específico; al obtener un GetLastError = ERROR_ALREADY_EXISTS; sabrás que debes escribir en el archivo de intercambio los parámetros y cerrar la nueva instancia.

Como variacion del anterior pueses usar OpenFileMapping; si te retorna 0 significa tambien que ya existe; si no la puedes crear y sabes que eres "la primera instancia".

Saludos
Responder Con Cita
  #3  
Antiguo 16-01-2008
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
Yo utilizo la opcion 1. Pero con esto detecto que la aplicación está activa y la accion siguente sería pasar parámetros y cerrar la nueva instancia.

La idea es que esa nueva instancia, que se cierra, pase a la primera, es decir que el valor de la antigua sea el de la nueva. De esta forma, a todos los efectos (para Windows y todos los programas activos), es la nueva la que existe aunque en realidad sea la antigua.

Gracias y Saludos.
Responder Con Cita
  #4  
Antiguo 16-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Ok; utilizas FindWindow y con ello obtienes el handle de la ventana de la primera instancia... a ese handle le envias un mensaje (WM_USER+6) y en wParam y lParam envias los nuevos parámetros que pueden ser punteros... y cierras; la primera instancia recive los nuevos parámetros y listo.

Saludos
Responder Con Cita
  #5  
Antiguo 17-01-2008
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
Cita:
Empezado por cHackAll Ver Mensaje
Ok; utilizas FindWindow y con ello obtienes el handle de la ventana de la primera instancia... a ese handle le envias un mensaje (WM_USER+6) y en wParam y lParam envias los nuevos parámetros que pueden ser punteros... y cierras; la primera instancia recive los nuevos parámetros y listo.

Saludos
Justo eso mismo hago, sólo que si envío punteros y cierro la 2ª instancia (la nueva), estos se pierden antes de recibir el mensaje, por lo que hay que esperar a estar seguros de que se reciben y después cerrar.

De todas formas la idea es que la instancia vieja se convierta en la nueva al finalizar el proceso (valor HINSTANCE hInstance).

Me explico: otro programa es el que llama al mio y debe esperar a que termine la ejecución y se cierre. Si previamente estaba abierto, debe parecer que es la instancia que el programa abrió, le pasa los parámetros y entre ellos uno que indique que se cierre al terminar. Este es el motivo de que pretenda cambiar el valor de HINSTANCE hInstance.

Lo que no se es si esto está permitido o es de uso exclusivo del S.O.

Otra posibilidad sería que se cerrase la instancia vieja, pero esto provocaría la perdida de datos y el trabajo que estuviera realizando.

Saludos.
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
Aplicación de Servicio+Aplicación Normal +Socket jake API de Windows 5 21-06-2007 18:53:19
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
EEUU no quiere ceder el control de Internet Sasuke_Cub Noticias 0 25-10-2005 14:39:42
Diferencia entre aplicacion Clx y aplicación normal??? JorgeBec Varios 1 27-10-2004 17:30:49
ceder el control de la ejecucion santiago14 Varios 1 24-04-2004 05:24:19


La franja horaria es GMT +2. Ahora son las 16:17:05.


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