Página 1 de 1

Encontrar ventanas con expresiones regulares

Publicado: 12 Sep 2012, 19:31
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?

Re: Encontrar ventanas con expresiones regulares

Publicado: 13 Sep 2012, 05:49
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.

Re: Encontrar ventanas con expresiones regulares

Publicado: 13 Sep 2012, 19:30
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.

Re: Encontrar ventanas con expresiones regulares

Publicado: 14 Sep 2012, 10:52
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

Re: Encontrar ventanas con expresiones regulares

Publicado: 15 Sep 2012, 10:24
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 ...

Re: Encontrar ventanas con expresiones regulares

Publicado: 17 Sep 2012, 08:37
por joana
En vez de MsgBox().

Usa la función ToolTip(). Búscalo en la ayuda es muy fácil de usar.

Re: Encontrar ventanas con expresiones regulares

Publicado: 30 Dic 2012, 15:12
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

Re: Encontrar ventanas con expresiones regulares

Publicado: 30 Dic 2012, 20:45
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.......

Re: Encontrar ventanas con expresiones regulares

Publicado: 06 Ene 2013, 12:43
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.

Re: Encontrar ventanas con expresiones regulares

Publicado: 07 Ene 2013, 14:12
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.

Re: Encontrar ventanas con expresiones regulares

Publicado: 07 Ene 2013, 22:47
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.

Re: Encontrar ventanas con expresiones regulares

Publicado: 07 Ene 2013, 23:18
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.