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! |
|
Muchas gracias, muy buen aporte, voy a investigar y meter mano por ahí...veremos que sale :)
|
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! |
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. |
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! |
Hola he leido este hilo y me ha parecido muy interesante, podias decirme donde poder descargar la dll dscwpmsg.dll? Gracias.
|
Cita:
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