FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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. |
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
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 |
#5
|
||||
|
||||
Cita:
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. |
|
|
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 |
|