Cómo centrar cualquier ventana en su pantalla con AutoHotKey

¿No es muy molesto cómo, al menos en Windows, cualquier ventana puede aparecer en cualquier parte de la pantalla? ¿Esa aleatoriedad diaria lo pone nervioso y prefiere tener más control sobre la ubicación de sus ventanas en la pantalla? Bueno, ahora puedes, gracias a AutoHotKey.

En este tutorial, veremos cómo puede resolver este problema con un script AutoHotKey. Lo construiremos para que mueva cualquier ventana al centro de su pantalla con solo presionar una tecla. ¿Suena dulce? ¡Veamos cómo se hace!

Cómo configurar una tecla de acceso rápido para centrar ventanas con AutoHotKey

La mitad de la batalla al crear un guión es determinar cómo funcionará incluso antes de escribir un solo carácter. Entonces, hagamos un plan de acción de este tipo en un lenguaje sencillo que luego “mutaremos” en un guión.

El “problema” que tiene Windows

Windows (como en “las cositas rectangulares en nuestras pantallas”, no el sistema operativo) tiende a aparecer en cualquier parte de la pantalla. Es una distracción y también puede ser molesto cuando sucede repetidamente. Especialmente cuando se trata de múltiples solicitantes que aparecen en diferentes lugares, esperando la entrada del usuario.

La solución al problema

Además de enviar pulsaciones de teclas y clics del mouse a cualquier ventana, AutoHotKey también puede manipularlos. Vimos en el pasado cómo puede usar AutoHotKey para anclar ventanas “siempre en la parte superior” usando un atajo de teclado. Esta vez, sin embargo, aprovecharemos las capacidades de manipulación de ventanas de AutoHotKey para:

  1. “Leer” el ID de la ventana activa.
  2. También “lea” sus dimensiones (ancho y alto).
  3. “Lea” las dimensiones del monitor.
  4. Combine las dimensiones del monitor y de la ventana para calcular las coordenadas óptimas para presentar dicha ventana en el centro de la pantalla.
  5. Mueva la ventana a esas coordenadas.

Finalmente, asignaremos lo anterior a un atajo. De esta manera, puede llamarlo “a pedido” en lugar de aplicarlo en todas las ventanas, lo que podría interferir con las aplicaciones y juegos de pantalla completa.

Tenga en cuenta que en este tutorial, nos sumergiremos directamente en AutoHotKey. Si no está familiarizado con él y desea obtener más información de antemano, consulte nuestra guía rápida de AutoHotKey para principiantes.

Primero, configurar la tecla de acceso directo

Mencionamos cómo asignaremos la función que crearemos a un atajo. Sin embargo, probablemente sea mejor si comenzamos con esa parte para sacarla del camino.

Comience descargando el instalador de Sitio oficial de AutoHotKey . Elija la versión “actual” en lugar de la v2 beta o la versión obsoleta 1.0. Luego, instálalo en tu PC.

Inicie el Explorador de archivos (la forma más rápida es con la combinación de teclas Windows + E) y muévase a la ruta donde desea crear su secuencia de comandos. Con AutoHotKey instalado, aparecerán algunas opciones nuevas en el menú contextual. Entonces, haga clic derecho en el espacio vacío de la ventana del Explorador de archivos y elija Nuevo > Script AutoHotKey .

Asigne un nombre al archivo de su secuencia de comandos y luego haga clic con el botón derecho en él y editar eso. Si no utiliza una aplicación de edición de texto compatible con el código, como Visual Studio Code o Notepad++, utilice el Bloc de notas de Windows. Evite editores como Wordpad, que podría agregar sintaxis inútil (para el propósito) a su “código”.

Cuando esté en el editor de su elección, verá que su secuencia de comandos AutoHotKey ya tiene algunas líneas rellenadas previamente en la parte superior. Están ahí por razones de estabilidad y compatibilidad. Son modificables, pero déjelos como están para este tutorial.

“Mover” dos o tres líneas debajo de ellos e ingrese el acceso directo que iniciará su función. Puede crear una combinación de teclas usando “+” para Shift, “^” para CTRL, “!” para Alt y “#” para la tecla de Windows, así como cualquier tecla “normal” del teclado (letras y números).

Para examplepara que la combinación CTRL + Y inicie su script, use:

                      
                        ^y::
                        

El doble “:” es como decir, “oye, AutoHotKey, asigna la cadena o combinación de teclas de la izquierda a todo lo que está a la derecha”.

“Mover” dos o tres líneas debajo de eso presionando Entery escriba “return”, que marcará el final de la función en particular. El resultado completo debería ser similar al siguiente:

                      
                        ^y::
                        
; This is a comment.
return

El “; Esto es un comentario.” line es precisamente eso, un comentario en el “código” del script que AutoHotKey no ejecutará. Está allí con fines de documentación para marcar el lugar donde ingresaremos el “código” del script en los siguientes pasos.

Si ha seguido nuestra guía sobre la creación de teclas de acceso rápido específicas de la aplicación con AutoHotKey en el pasado, en este caso… no lo haga. Desea que su tecla de acceso rápido para centrar ventanas sea “global” para centrar cualquier ventana desde cualquier aplicación. Si lo “vincula” a una aplicación en particular, solo actuará en las ventanas de esta aplicación.

Obtenga los detalles de la ventana activa

Queremos que nuestro atajo actúe en la ventana activa, y también necesitamos sus dimensiones para nuestros cálculos. Podemos encontrar esos detalles con lo siguiente:

                      
                        WinGetTitle, ActiveWindowTitle, A
                        
WinGetPos,,, Width, Height, %ActiveWindowTitle%

Reemplace la línea de comentario que agregamos al script en la sección anterior con las dos líneas anteriores. ¿El resultado?

  • La primera línea toma el título de la ventana activa.
  • La segunda línea lee su ancho y alto y los asigna a las palabras/variables “Ancho” y “Alto”, que usaremos a continuación para nuestros cálculos.

Obtuvimos los detalles de la ventana activa, pero también necesitamos las dimensiones del área visible del monitor para lograr nuestro objetivo. Afortunadamente, descubrirlos es aún más fácil.

¿Qué pasa con el área del monitor principal?

No necesitamos comandos adicionales para encontrar el ancho y la altura de nuestro monitor principal. AutoHotKey viene con dos variables preestablecidas que ya contienen esa información para nosotros: “A_ScreenWidth” y “A_ScreenHeight”.

Entonces, cuando los vea en la siguiente sección, ya “contienen” el ancho y la altura del monitor principal. No se necesita nada para asignarles los valores correctos. Por lo tanto, podemos usarlos directamente en nuestros cálculos.

Tiempo para calcular la posición de destino

Podemos incluir los cálculos directamente en los puntos del script donde los necesitemos. Aún así, es más fácil y mejor para la legibilidad si los asignamos a dos variables y luego usamos esas variables en nuestro script.

Entonces, elijamos “TargetX” como la variable que mantendrá las coordenadas horizontales y “TargetY” como la que tiene las coordenadas verticales donde debemos mover la ventana para que aparezca en el centro de la pantalla.

                      
                        TargetX := (A_ScreenWidth/
                        
                          2
                        
                        )-(Width/
                        
                          2
                        
                        ) ; Here we calculate the horizontal 
                        
                          window
                        
                         target...
                        
TargetY := (A_ScreenHeight/2)-(Height/2) ; ...and here the vertical one.

Descifremos esas líneas en un lenguaje sencillo:

  • “TargetX” y “TargetY” son las dos variables.
  • “:=” informa a AutoHotKey que las variables deben ser iguales a los resultados de los cálculos de la derecha y que esos resultados deben tratarse como números.
  • “(A_ScreenWidth/2)” divide el ancho del monitor completo por dos.
  • “(Ancho/2)” hace lo mismo para el ancho de la ventana activa.

Con lo anterior, estamos restando la mitad del ancho de la ventana activa a la mitad del ancho de la pantalla. Lo que queda es el espacio a la izquierda de la ventana, desde el lado izquierdo de la pantalla hasta donde debería aparecer la ventana. La segunda línea hace lo mismo pero para la altura.

Ahora para reposicionar la ventana

Equipados con el conocimiento todopoderoso adquirido de los comandos místicos que vimos anteriormente, ahora podemos crear nuestro encantamiento mágico que completará el ritual de teletransportación de la ventana. O, en lenguaje sencillo, use el comando “WinMove” de AutoHotKey para mover ventanas alrededor de la pantalla.

WinMove espera que lo “alimentemos” con al menos tres piezas de información para hacer su trabajo: el título de la ventana de destino y las coordenadas a dónde moverlo. Dado que ya hemos asignado esos datos a las variables, el comando es tan simple como:

                      
                        WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%
                        

En lo anterior:

  • “WinMove” es el comando AutoHotKey que mueve una ventana.
  • “%ActiveWindowTitle%” es la variable donde se asigna el título de la ventana activa.
  • “%TargetX%” y “%TargetY%” son las coordenadas horizontales y verticales donde mover la ventana.

También puede cambiar el tamaño de las ventanas con WinMove, omitir aquellas que tienen fragmentos de texto particulares en sus títulos o contenido, etc. Dado que esas funciones están fuera del alcance de este artículo, verifique Documentación oficial de AutoHotKey sobre el comando WinMove para más sobre ellos.

El guión final

Finalmente, llegamos a la parte más desafiante de nuestro viaje. Prepárese para el siguiente paso que espera que guarde el script y, bueno… ejecútelo.

Sí, eso fue todo: el guión está completo y no hay nada más que hacer que probarlo. Use el acceso directo que definió y cualquier ventana activa se moverá al centro de su pantalla.

El archivo de script final, tal como se abrió en un editor de texto, debería verse así:

                      
                        
                          #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
                        
                        
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
^y::
WinGetTitle, ActiveWindowTitle, A ; Get the active window ' s title for " targetting " it/acting on it.
WinGetPos,,, Width, Height, %ActiveWindowTitle% ; Get the active window 's position, used for our calculations.
TargetX := (A_ScreenWidth/ 2 )-(Width/ 2 ) ; Calculate the horizontal target where we'll move the window .
TargetY := (A_ScreenHeight/ 2 )-(Height/ 2 ) ; Calculate the vertical placement of the window .

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; Move the window to the calculated coordinates.

return

Tenga en cuenta que puede copiar el script anterior, pegarlo en el Bloc de notas o en un editor de texto similar y guardarlo con una extensión AHK. Luego, “ejecútelo”, con AutoHotKey instalado, para centrar cualquier ventana cada vez que presione CTRL + Y. Si no le gusta ese atajo, ajuste la línea “^y::” a una combinación de teclas diferente. Para example, !+c:: asignaría la función a la combinación de teclas Shift + Alt + C.

Pista extra

Para su conveniencia, hemos decidido conjurar e incluir una secuencia de comandos secundaria que será útil para aquellos con configuraciones de dos monitores.

Para simplificar este artículo, hemos incluido información sobre cómo funciona el script en forma de comentarios. Puede eliminarlos de su iteración.

La breve historia de cómo difiere del script anterior es que también agregamos una variable PositionToggle y algo de “lógica IF”. Luego los usamos para “cambiar” la ventana entre monitores. Debemos tener en cuenta que es una solución poco elegante y “hack-y” al problema. Sin embargo, lo preferimos a un código más optimizado, ya que este enfoque es más fácil de entender y modificar para todos los que no están familiarizados con AutoHotKey.

                      
                        
                          #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
                        
                        
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
PositionToggle = 1 ; Use a number as a toggle for marking on which monitor the window should appear.
^y::
WinGetTitle, ActiveWindowTitle, A
WinGetPos,,, Width, Height, %ActiveWindowTitle%

If PositionToggle = 1 ; Check the toggle's state and " do what's between the curly brackets" if it's set to 1 for our primary monitor.
{
TargetX := (A_ScreenWidth/2)-(Width/2)
TargetY := (A_ScreenHeight/2)-(Height/2)
PositionToggle = 2 ; " Flick " the toggle so that if we reuse the hotkey, our active window will move to the second monitor.
}
Else If PositionToggle = 2 ; Have we used the hotkey before, " flicking " the toggle number to the second monitor? Then the script should instead do what ' s between the following curly brackets instead of the ones above.
{
SysGet, Mon2, Monitor, 2 ; Get the second monitor ' s details
Mon2Width := Mon2Right - Mon2Left ; Calculate the second monitor ' s actual width.
Mon2Height := Mon2Bottom - Mon2Top ; Calculate the second monitor ' s actual height.

TargetX := (Mon2Width/2)-(Width/2)+A_ScreenWidth ; Calculate where to move the window. Notice that we also add the primary monitor ' s width since AutoHotKey can ' t move windows on individual monitors but across their combined " surface " .
TargetY := (Mon2Height/2)-(Height/2)+Mon2Top ; Calculate the optimal vertical target for moving the window on the second monitor. Like above, the second monitor ' s vertical details are detected in relation to the primary monitor. Thus, we have to get creative to get an optimal target by acknowledging how the second monitor ' s top isn ' t equal to 0 (like the primary one ' s).

PositionToggle = 1 ; Flick the toggle back so that if we reuse the hotkey, the window will move back to the primary monitor.
}

WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; The actual action, moving the active window to our calculated coordinates.

return

Centre una ventana con una llave, la manera fácil

¡Y ahora ya está! Si todo funciona bien, ahora puede usar su tecla de acceso directo recién configurada para centrar una ventana en cualquier momento.

Related Posts