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 08-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
SendMessage no me funciona

Hola de nuevo !

No entiendo por qué no me funciona el SendMessage en este caso, si por otro lado ayer con hilo diferente Seoane me dí una opción que me funcionó perfectamente.

A ver ...

En un formulario de mi aplicación principal pido un código de usuario. Después de introducirlo, y en el evento FormClose del Form correspondiente hago :

Código Delphi [-]
const
  WM_CLOSEREQUEST = WM_USER + 102;
 
procedure TLogIn.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  fHandle := FindWindow(nil, 'Wake-Up');
  if fHandle <> 0 then
    SendMessage(fHandle, WM_CLOSEREQUEST, 0, 0);
  ...
  ...
end;

Y en la otra aplicación denomnidad Wake-Up lo que tengo es :
Código Delphi [-]
const
  WM_CLOSEUSERID = WM_USER + 102;
 
type
  TWakeUp = class(TForm)
  ...
  private
    { Private declarations }
    procedure Close_UserID_Request(var Msg: TMessage); message WM_CLOSEUSERID;
  public
    { Public declarations }
  end;

procedure TWakeUp.Close_UserID_Request(var Msg: TMessage);
begin
  if Assigned(WakeUp1) then begin
    WakeUp1.Free;
    WakeUp1 := nil;
  end;
end;

Pues bien, no entra nunca en el procedimiento TWakeUp.Close_UserID_Request, aun habiendo comprobado que el fHandle obtenido en la aplicación que 'manda' el mensaje es diferente de 0 y que pasa correctamente por SendMessage.

Qué estoy haciendo mal ??

Garcias por vuestra ayuda.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 08-10-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
intenta con PostMessage
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 08-10-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Antes de nada, esto:
Código Delphi [-]
if Assigned(WakeUp1) then begin
  WakeUp1.Free;
  WakeUp1 := nil;
end;

Yo lo haría así (si lo se, soy un quisquilloso ):
Código Delphi [-]
  FreeAndNil(WakeIp1);

Con respecto a tu problema, dices que FindWindow te devuelve un handle, pero ¿estas seguro que es el correcto?. Puede haber mas de una ventana con ese titulo, puede que la ventana con ese titulo no sea TWakeUp. Hay veces que la cosa es tan tonta como que tienes una carpeta con ese mismo nombre y la tienes abierta ¿No tendrás una carpeta llamada "Wake-up"?
Responder Con Cita
  #4  
Antiguo 08-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Gracias Domingo de nuevo por tu ayuda.

No, seguro que el Handle que obtengo es correcto. De hecho no utilizo el nombre exacto que he puesto aquí en el hilo, sino uno mas complicado de prueba con varias caracteres más.

Y además lo inicializo en la aplicación con Application.Title := '....'

Además seguro que debe ser el Handle correcto ya que cuando no tengo activa la aplicación Wake-Up, el Handle que me devuelve es 0.

Lo dicho, no entiendo por qué no funciona si con la explicación tuya de ayer solucioné el otro problema que tenía. Perfectamente. Y ahora trataba de hacer una cosa adicional pero en sentido contrario.

Me queda una duda que no sé si tiene algo que ver. Entiendo que por supuesto no debería tener nada que ver.

En el .dpr del programa Wake-Up comprueba que sólo se permita una instancia del programa de la siguiente manera :
Código Delphi [-]
  Handle := CreateMutex(nil, true, 'E1BFB967-E3EB-47EB-977E-780CE7BB4723');
  if GetLastError = ERROR_ALREADY_EXISTS then begin
     PostMessage(HWND_BROADCAST, messID, 0, 0);
     Exit;
  end;

Como decía, entiendo que no tiene nada que ver como para que el SendMessage no funcione, no ?
__________________
Piensa siempre en positivo !
Responder Con Cita
  #5  
Antiguo 08-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Probé también con PostMessage, tal y como indicaba droguerman, y nada.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 08-10-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por gluglu Ver Mensaje
Y además lo inicializo en la aplicación con Application.Title := '....'
Empezáramos por ahí. En delphi, todas las aplicaciones que creamos normalmente "VCL Forms Application", crean una ventana por cada formulario y además una oculta que pasa a ser la ventana principal de la aplicación.

Cuando tu utilizas Aplication.Title, a la ventana que le estas cambiando el titulo es a la que esta oculta. En tu caso a la ventana que le tienes que cambiar el titulo es a WakeUp, y para eso esta la propiedad caption:
Código Delphi [-]
WakeUp.Caption:= '...';
Y deja el Aplication.Title tranquilo
Responder Con Cita
  #7  
Antiguo 08-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Cachis !!!

Perfecto de nuevo Domingo !!

Pues mira que ha sido casualidad creo yo que la pregunta que me contestaste ayer, el Caption de la ventana principal coincidía con el Application.Title que le dí (lo cual suele ser bastante común), y dí con la solución a la primera.

Ahora resulta que la aplicación Wake-Up, la ventana principal la tengo sin marco (bsNone) y por eso no le puse ningún Caption a la ventana principal. Y claro, por eso por más que intentaba no funcionaba !!

De nuevo, mil gracias por tu ayuda. Todo perfecto. Me traía loco ya !
__________________
Piensa siempre en positivo !
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
No me funciona TRY - EXCEPT - END leanfreue OOP 13 14-04-2007 18:08:38
IIS no funciona YaninaGenia .NET 2 26-07-2006 14:21:59
BDE, no funciona martita Conexión con bases de datos 4 26-05-2006 22:21:12
SendMessage y dos instancias de una aplicación Aldo OOP 3 22-05-2006 19:43:12
like no funciona ! dmasson Conexión con bases de datos 9 23-03-2004 14:10:50


La franja horaria es GMT +2. Ahora son las 06:37:35.


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