Ejemplos usando el Api de windows para Visual basic

116 - Hook - Posición de una ventana.

Volver al Listado Api - Anterior - Siguiente



 

 

 

Contenido

 

 

 

 


Ejemplo 1 - Detectar el cambio de posición

Ejemplo que crea un procedimiento que captura los mensajes de windows, en este caso para poder saber cuando una ventana se está moviendo, o se cambia de posición

En código, se instala un Hook que espera el mensaje llamado WM_WINDOWPOSCHANGING. Este mensaje llega o se produce cuando una ventana ha cambiado de posición.

 

El ejemplo que armé, consiste en 2 formularios, el que instala el Hook es el Form1, pasandole en el parámetro al procedimiento que crea el Hook, el Hwnd de otro Form, en este caso Form2:

 

ret_Hook = SetWindowLong(Form2.hwnd, GWL_WNDPROC, AddressOf Hook)

 

El Procedimiento que intercepta los mensajes debe estar en un módulo bas. Dentro del Módulo se coloca, donde está la clausula If que comprueba si se ha movido el Form2, lo siguiente:

    If msg = WM_WINDOWPOSCHANGING Then
       
       Form1.Caption = "Posición X e Y del Form2 2:   " & lParam.x & "  --  " & lParam.y
        
    End If 

 

Es decir imprime en el caption del Form1, la nueva posición x y la posición Y del Form2.

Nota: También podríamos interceptar el cambio de posición de cualquier ventana de windows, solo hay que pasar el Hwnd de la ventana en cuestión

 

Esta es una imagen de ejemplo:

vista del ejemplo en visual basic para interceptar cambio de posición de ventanas de windows

 

Importante: Hay que estar seguros de que no se produzca ningún error en el programa, mientras se está ejecutando el HooK, ya que si no se cerrará el IDE de visual basic.

 

Agregar un Form1, un Form2 y un Módulo bas

 

Código fuente del Módulo bas

Código fuente en el Form1:

 


Ejemplo 2 - Impedir el cambio de posición

Este otro ejemplo, lo que hace es , al querer mover la ventana de lugar ( cuando se dispara el mensaje WM_WINDOWPOSCHANGING ), impide el cambio, en realidad lo que hace es establecer nuevamente el Left y Top actual del Formulario a la variable lParam.

 

Ejemplo

Código fuente en el formulario

 

 

Código fuente en un módulo bas

 


Ejemplo 3 - Limitar movimiento de una ventana al área de trabajo del escritorio.

Este otro ejemplo , muestra una forma de poder limitar el movimiento del formulario en el área de trabajo del escritorio, es decir cuando se intenta mover mas allá del costado izquierdo, derecho , arriba o abajo.

El código es prácticamente igual a los anteriores, es decir se utiliza el mensaje de windows WM_WINDOWPOSCHANGING para saber cuando se está moviendo la ventana. Si se está moviendo, entonces se averigua el rectángulo del área del escritorio con la Api systemParametrsInfo con el mensaje SPI_GETWORKAREA para devolver una variable de tipo Rect con los datos , y luego poder cambiar la posición x e y del form mediante la variable lParam. También se usa la función GetWindowRect para saber las dimensiones del formulario ( ancho y alto )

Descargar

 


Enlaces relacionados con Hook



Buscar en Recursos vb