Encontrar ventanas con expresiones regulares

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
gvshol
Mensajes: 10
Registrado: 12 Sep 2012, 19:12

Encontrar ventanas con expresiones regulares

Mensaje por gvshol »

Acabo de comenzar a utilizar Autoit y la verdad es que para automatizar algunas tareas esta muy bien.

Ya he conseguido hacer que me abra una serie de progamas y los coloque en un sitio concreto, esta muy bien explicado en la ayuda.

Ahora quiero dar un paso mas y me gustaria crear un codigo que me permita lo siguiente:

Me gustaria poder contar ventanas que contengan una palabra concreta.

Por ejemplo, saber cuantos "Notepad" tengo abiertos, ¿Cual seria el camino a seguir?
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Encontrar ventanas con expresiones regulares

Mensaje por Chefito »

Mira la función Winlist en la ayuda. Te da un array con el número de ventanas de windows. Solamente tienes que llamar a esta función y hacer un bucle for para comparar el texto de la ventana que quieres encontrar con el que te da winlist. Metes dentro un contador y listo :smt023 .
Para encontrar un texto determinado dentro del título de la ventana puedes utilizar la función stringinstr.

Mira el ejemplo de winlist y adáptalo.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
gvshol
Mensajes: 10
Registrado: 12 Sep 2012, 19:12

Re: Encontrar ventanas con expresiones regulares

Mensaje por gvshol »

Gracias por la respuesta, pero la verdad es que no he entendido nada y lo peor, que no creo que sea porque lo hayas expresado mal.

Empezare por preguntas mas simples.

Gracias de nuevo.
gvshol
Mensajes: 10
Registrado: 12 Sep 2012, 19:12

Re: Encontrar ventanas con expresiones regulares

Mensaje por gvshol »

Ya le voy cogiendo el hilo y ha conseguido contar las ventanas que quiera.

Ahora el paso siguiente, ¿Como hago para que se "refresque" y me vaya diciendo las ventanas a tiempo real?

Codigo para contar ventanas que he hecho:

Código: Seleccionar todo

;Contando Ventanas.
Local $Ventanas = WinList ("[REGEXPTITLE:Nuevo\s]")

If $Ventanas [0][0] >= 0 Then
	MsgBox (0, "Ventanas", "Numero de Ventanas = "& $Ventanas [0][0])
EndIf
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Encontrar ventanas con expresiones regulares

Mensaje por jamaro »

Bienvenido a Autoit gvshol:

Ya verás como poco a poco avanzas y vas queriendo hacer cosas más complicadas.

Para hacer ese "refresco" que comentas, puedes utilizar la función While ... WEnd, poniendo tu código dentro.

Dependiendo de la necesidad de "refresco" que tengas, puedes poner un Sleep para que haga una pausa entre esas solicitudes de datos de Winlist

Código: Seleccionar todo

While 1
 (tu código)
Sleep(5000)
WEnd
Espero que te sirva para avanzar ...
joana
Aprendiz de Mago
Mensajes: 39
Registrado: 09 Jul 2012, 13:33

Re: Encontrar ventanas con expresiones regulares

Mensaje por joana »

En vez de MsgBox().

Usa la función ToolTip(). Búscalo en la ayuda es muy fácil de usar.
gvshol
Mensajes: 10
Registrado: 12 Sep 2012, 19:12

Re: Encontrar ventanas con expresiones regulares

Mensaje por gvshol »

Ya he conseguido buscar las ventanas y entender que con esta expresion:

Código: Seleccionar todo

Local $Ventanas = WinList ("[REGEXPTITLE:Bloc]")
Consigues un dato que lo puedes utilizar para otros propositos.

Ya consigo utilizar este numero, pero no consigo que se actualice. Mi idea es que cuente las ventanas abiertas y se actualice si abro una nueva ventana con esas caracteristicas., ¿Alguien que me abra los ojos?

Desde ya muchas gracias.

Código: Seleccionar todo

#include <GUIConstants.au3>


Local $Ventanas = WinList ("[REGEXPTITLE:Bloc]")

GUICreate("Contador y colocador de ventanas", 400, 300)
GUICtrlCreateLabel ("Ventanas Abiertas = "& $Ventanas [0][0], 30, 10)
GUISetState(@SW_SHOW)

While 2
  $msg = GUIGetMsg()

  Select

    Case $msg = $GUI_EVENT_CLOSE ;evento del sistema
      MsgBox(0, "Cerrando Aplicación", "Está usted cerrando la aplicación.....Cerrando")
      ExitLoop
  EndSelect
WEnd
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Encontrar ventanas con expresiones regulares

Mensaje por Chefito »

gvshol escribió:Ya consigo utilizar este numero, pero no consigo que se actualice. Mi idea es que cuente las ventanas abiertas y se actualice si abro una nueva ventana con esas caracteristicas., ¿Alguien que me abra los ojos?
Ya te dijo jamaro en un par de post más arriba lo que debías de hacer para que se fuese comprobando cada cierto tiempo. Leetelo otra vez, y si no entiendes algo pregunta.
Otra posibilidad si no quieres parar el script un determinado tiempo, es meter el código que contabiliza las ventanas en una función y llamarla cada cierto tiempo con adlibregister. Para más información, mírala en la ayuda que la explica mejor que yo :smt003 .

Saludos y más atención a lo que te responden los compas........que encima que se molestan.......
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
gvshol
Mensajes: 10
Registrado: 12 Sep 2012, 19:12

Re: Encontrar ventanas con expresiones regulares

Mensaje por gvshol »

He hecho esto que me han dicho y buscado informacion acerca de adlibregister pero no soy capaz.

He metido dentro del While... Wend el resultado de Winlist sin resultados.

He metido dentro del while... el GUI y lo mismo.

es por esto que pregunto, porque si ejecuto el script cuenta las ventanas que estan en marcha, pero si cierro o abro ventanas no actualiza la cuenta.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Encontrar ventanas con expresiones regulares

Mensaje por Chefito »

Es que lo que tienes que meter en el bloque while.......wend no es el resultado de las ventanas encontradas (el resultado siempre será el mismo) sino la función winlist para que te la vaya ejecutando cada cierto tiempo y vaya actualizando los resultados. Ejemplo con adlibregister:

Código: Seleccionar todo

#include <GUIConstants.au3>

Local $Ventanas = WinList ("[REGEXPTITLE:Bloc]")

GUICreate("Contador y colocador de ventanas", 400, 300)
$lbVentanasAbiertas=GUICtrlCreateLabel ("Ventanas Abiertas = "& $Ventanas [0][0], 30, 10)
GUISetState(@SW_SHOW)
AdlibRegister("VentanasAbiertas",500)	;se ejecuta cada medio segundo.

While 1
  $msg = GUIGetMsg()

  Select

    Case $msg = $GUI_EVENT_CLOSE ;evento del sistema
      MsgBox(0, "Cerrando Aplicación", "Está usted cerrando la aplicación.....Cerrando")
      ExitLoop
  EndSelect
WEnd

Func VentanasAbiertas()
	$Ventanas = WinList ("[REGEXPTITLE:Bloc]")
	GUICtrlSetData($lbVentanasAbiertas,"Ventanas Abiertas = "& $Ventanas [0][0])
EndFunc
He puesto que adlibregister llame a la función cada medio segundo. Puedes varias este valor y aumentarle el tiempo si no necesitas esa velocidad.
Mira los cambios que he hecho y analizados.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
gvshol
Mensajes: 10
Registrado: 12 Sep 2012, 19:12

Re: Encontrar ventanas con expresiones regulares

Mensaje por gvshol »

Muchas gracias por la ayuda.

Voy a ver detenidamente los cambio y a ver si soy capaz de comprenderlos. Para cuando lo asimile, expongo aqui que hace cada linea y asi me podeis corregir.

Me reitero, muchas gracias.
gvshol
Mensajes: 10
Registrado: 12 Sep 2012, 19:12

Re: Encontrar ventanas con expresiones regulares

Mensaje por gvshol »

Perdon por los errores que escriba a continuacion, pero creo que ya comprendo algo mas de AutoIt, todo un logro para mi.

Código: Seleccionar todo

$lbVentanasAbiertas = GUICtrlCreateLabel ("Ventanas Abiertas = "& $Ventanas [0][0], 30, 10)
En este primer cambio que me indicas, entiendo que lo que haces es crear un arreglo para que nos devuelva el resultado del arreglo $Ventanas dentro del WUI.

Código: Seleccionar todo

Func VentanasAbiertas()
       $Ventanas = WinList ("[REGEXPTITLE:Bloc]")
       GUICtrlSetData($lbVentanasAbiertas,"Ventanas Abiertas = "& $Ventanas [0][0])
    EndFunc 
Con esta funcion entiendo que lo que hacemos es contar ventanas en la primera linea y en la segunda le decimos que hacer con el numero, en este caso que lo imprima en el GUI.

Código: Seleccionar todo

 AdlibRegister("VentanasAbiertas",500) 
Esta ultima ha sido la mas sencilla. Con esta funcion, entiendo que puedo hacer que las funciones se refresquen con el margen que yo quiera.

Muchas muchas gracias, de verdad. Ahora toca seguir mirando cosas y tratar de aprender.
Responder