Función WinExist / IfWinNotExist de Autohotkey

Función WinExist / IfWinNotExist de Autohotkey

WinExist() es uno de los comandos más utilizados en los Script de Autohotkey. Comprueba si existe una ventana específica en el entorno de Windows. En el caso que exista (puede estar visible o no), esta función devuelve la ID única (HWND) de la primer ventana coincidente, es decir, si existe más de una ventana con el mismo texto en su nombre de ventana (Caption) se capturará el HWND de la primer ventana encontrada.

Estructura de la función WinExist()

IDVentana .= WinExist(TituloVentana, TextoVentana, ExcluirTitulo, ExcluirTexto)

Parámetros de la Función WinExist()

  • TituloVentana: Es el título de la ventana u otro criterio que identifique la ventana que estamos buscando
  • TextoVentana: Si este parámetro está presente se debe indicar un texto de algún elemento único de la ventana. Para que la función detecte los elementos ocultos debe estar activado en el Script DetectHiddenText
  • ExcluirTitulo: No se tendrán en cuenta las ventanas que contengan parte de este texto
  • ExcluirTexto: De igual manera no se tendrán en cuenta las ventanas que contengan algún elemento con éste texto

El valor que devuelve la función es la ID única de la ventana, el HWND. Este valor es un entero Hexadecimal de la ventana coincidente. Si no se encuentra ninguna ventana el valor devuelto será 0x0.

Mediante una simple condición podemos saber si existe una ventana, por ejemplo:

If WinExist("Calculadora") {
	MsgBox La ventana Calculadora existe
}
Else {
	MsgBox La ventana Calculadora NO existe
}

Yo no prefiero utilizar este tipo de método ya que si el usuario está ejecutando la calculadora de Windows pero en un idioma diferente la ventana de la misma tendrá otro nombre (Calculator) por lo que no la reconocerá. Para esto prefiero utilizar la búsqueda por su nombre de proceso por lo que el Script anterior quedaría así:

If WinExist("ahk_exe calc.exe") {
	MsgBox La ventana Calculadora existe
}
Else {
	MsgBox La ventana Calculadora NO existe
}

De la misma manera pero de manera inversa podemos saber si la ventana NO existe. Este método está en desuso y no se aconseja aunque funciona perfectamente.

Uso de la función IfWinNotExist

IfWinNotExist, Calculadora
	MsgBox La ventana NO existe

Para esto es aconsejable utilizar el siguiente método:

If !WinExist("Calculadora") {
	MsgBox La ventana Calculadora NO existe
}
Else {
	MsgBox La ventana Calculadora existe
}

Como vemos se utilizo !WinExist() (negación de WinExist()) para evaluar si la ventana NO existe.

Volviendo al retorno del valor de la función si queremos saber el HWND podemos utilizar este ejemplo

IDVentana .= WinExist(“ahk_exe calc.exe”)
	MsgBox %IDVentana%

Si la ventana no existe la variable IDVentana valdrá 0x0. También es interpretado como False por lo que podremos utilizar

IDVentana .= WinExist("ahk_exe calc.exe")

If %IDVentana% {
	MsgBox El HWND de la ventana es %IDVentana%
	WinActivate, ahk_exe calc.exe
}
Else {
	MsgBox La ventana no existe por lo que se devuelve el valor %IDVentana%
}

Como vemos, la función WinExist almacena en la variable IDVentana el valor hexadecimal. Luego con If %IDVentana% evaluamos si es verdadero (si la variable contiene algún valor diferente a 0 (false)) quiere decir que existe.

Si probamos el Script teniendo la Calculadora de Windows ejecutada nos mostrará el HWND de la ventana y luego activará la aplicación mediante WinActivate.

Te fue útil el artículo? Califícalo

Votos: - Promedio: