Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Capturar eventos de una ventana externa (https://www.clubdelphi.com/foros/showthread.php?t=64922)

pedrosan 10-11-2009 17:24:03

Capturar eventos de una ventana externa
 
Hola a todos,estoy necesitando ayuda, basicamente lo que quiero hacer es lo siguiente: Existe una aplicacion externa,una ventana externa y necesito que mi ventana, o sea, la de mi aplicacion tome los eventos o se posicione junto a la ventana de la aplicación externa. Es decir, si maximizo la ventana de la aplicación externa también se maximize mi ventana, lo mismo al minimizar etc.
Algún aporte? muchas gracias!

escafandra 11-11-2009 00:39:36

Se me ocurre SetWindowsHookEx, con WH_CALLWNDPROC o con WH_GETMESSAGE.

Saludos.

pedrosan 11-11-2009 00:58:33

Muchas gracias, muy buen aporte, voy a investigar y meter mano por ahí...veremos que sale :)

pedrosan 12-11-2009 15:25:56

Mover mi ventana pegada a la ventana de otra aplicacion?
 
Salio perfecto,funciona trabajando con un hook, solo que en vez de usar SetWindowsHookEx utilicé la funcion SetCWPMSGHook() que instala un hook para los mensajes WH_CALLWNDPROC y/o WH_GETMESSAGE. Esta funcion se encuentra en la dll gratuita dscwpmsg.dll.
El código dentro de la funcion callback (esta función es llamada por el hook instalado desde la dll,dscwpmsg) sería algo así:

function Callback(SenderHWnd:HWND; wMsg:LongInt; wParam:LongInt; lParam:LongInt): LongInt;
.
.
.
WinClassName := GetWindowClassName(SenderHWnd);
WM_SYSCOMMAND: begin
if (WParam = SC_MINIMIZE) then
begin
if (WinClassName = 'xxxxxx') then
Main.ShowMinimizedWebBrowser();
end;
if (WParam = SC_RESTORE) then
begin
if (WinClassName = 'xxxxxx') then
Main.ShowNormalWebBrowser();
end;
end;

.
.
.
Ahora bien, lo que voy a intentar hacer es que mi ventana se mueva si es q la ventana de la otra apliacion se mueve, es decir,si se arrastra la ventana de la aplicacion,mi ventana se mueva pegada a ella,junto con ella,no se si me explico... Si alguien tiene algún aporte al respecto se lo voy a agradecer,mientras veo que me va saliendo.

Saludos!

escafandra 12-11-2009 19:35:00

La idea que te propuse del Hook era para que capturaras los Mensajes WM_MOVING, WM_MOVE y WM_SIZING para reenviarselos a tu ventana con las modificaciones pertinentes según como adoses tu ventana a la anfitriona.

Por su puesto capturando mas mensajes puedes hacer mas cosas con tu ventana.;)

Saludos.

pedrosan 12-11-2009 19:49:26

Si, tal cual, logre hacerlo, solo q tenia qveriguar cual funcion usar para lograr "movimiento"....basicamente,el código quedaría algo asi (a continuación del código escrito arriba):

WM_MOVING: Begin
if (WinClassName = 'xxxxxxx') then
begin
GetWindowRect(SenderHWnd, rcClient);
Main.MoveWebBrowser(rcClient.Top,rcClient.Right);
end;

Y en la funcion MoveWebBrowser utilizo MoveWindow con el handle correspondiente a mi venta y demás parametros...

El unico temita que me quedaría por intentar resolver es tratar de eliminar el delay entre que muevo la ventana y la mia cambia de posición...no se si será posible, tal vez utilizando AnimateWindow? ?

Muchas gracias escafandra, fue fundamental tu aporte!

deneus 31-10-2010 16:26:58

Hola he leido este hilo y me ha parecido muy interesante, podias decirme donde poder descargar la dll dscwpmsg.dll? Gracias.

pedrosan 01-11-2010 13:50:22

Cita:

Empezado por deneus (Mensaje 380997)
Hola he leido este hilo y me ha parecido muy interesante, podias decirme donde poder descargar la dll dscwpmsg.dll? Gracias.

Hola, encontraras informacion sobre la dll y podras descargarla de aqui: http://www.telecable.es/personales/j...htm?trucos.htm

Saludos!


La franja horaria es GMT +2. Ahora son las 20:12:41.

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