Página 1 de 1

Ayuda con listado de arrays

Publicado: 22 Nov 2013, 20:29
por Machine
Hola gente del foro!

Tengo conocimientos basicos sobre programacion y necesito ayuda con un programilla que estoy haciendo.
Tengo varios nombres de usuarios disintos y quisiera que los muestre usando un loop. Por ej

User1
User2
User3
User10

Como tendria que hacer para que los muestre user1 luego user2 etc

Hasta el momento los estoy copiando y pegando desde un texto usando mouseclick pero, imagino que con algun codigo con arrays seria mucho mas facil.
Gracias por su ayuda!

Re: Ayuda con listado de arrays

Publicado: 22 Nov 2013, 20:46
por arkcrew
Buenas,

La sintaxis de un array es sencilla, no es más que un vector , pero en vez de tener coordenadas, tiene datos.

Ejemplo: Local $array[3] = ["numero1","numero2","numero"]

Aqui tienes definido un array de una dimensión con 3 contenidos. Para recorrerlos, no tienes más que usar un bucle:

For $a = 0 to Ubound($array)-1
msgbox(0,"",$array[$a])
next

Tienes que tener en cuenta que aunque el array tenga 3 dimensiones, siempre se empieza desde 0, por tanto el bucle va desde 0 hasta el total -1 (Ubound($array)-1), por tanto la variable tomaría valores: $a = 0, $a=1 y $a = 2 para los tres valores correspondientes.

Espero haberme explicado con claridad!!

Saludos!

Re: Ayuda con listado de arrays

Publicado: 22 Nov 2013, 21:26
por Machine
Genial! Gracias por tu ayuda, me voy a acercando a lo que necesito.

El codigo q estoy usando es

Código: Seleccionar todo

$cont=0
$salto=124
$salto2=18
global $num_elem = 19
global $arr[$num_elem]

While $cont < $num_elem

MouseClick("left",1910,60 + $salto2*$cont,2,0)
Send("^c")
MouseClick("left",2370 - $salto*$cont,1420,1,0)
Sleep(100)
MouseClick("left",1285,541,1,6)
Send("^v")
$cont = $cont+1


Wend
Lo que hace es copiar los nombres de un .txt y los pega en otro lado. Lo que necesito es que los nombres sean escritos de a uno por vez. Como tendria que modificar el codigo para eso?

Gracias!

Re: Ayuda con listado de arrays

Publicado: 22 Nov 2013, 21:37
por arkcrew
Buenas,

A ver, una cosa que suele ayudar mucho es la ayuda, solo tienes que pulsar F1 en el Scite y se abre, vas al buscador y pones "file write" o lo que sea que no sepas y te aparecen las funciones relaccionadas. Lo digo por futuras referencias, ya que lo que preguntas es algo muy sencillo y viene explicado perfectamente.

Si lo que quieres es escribir, no tienes más que trabajar con las funciones file, te explico como, aunque viene en la ayuda.

Primero abres el fichero que vas a usar, lo haces así: Local $fichero= FileOpen("prueba.txt", 1) , el 1 es el indicador de permisos, en este caso abrimos con permisos de escritura.

Ahora una vez tienes abierto el archivo, procedes a insertarle líneas, ¿cómo?, pues muy fácil, FileWriteLine($fichero, "Lo que quieres escribir"& @CRLF) , con esto ya has escrito una línea, lo último, el @CRLF lo que hace es meter un salto de línea, si no lo haces se escribiría todo seguido y creo que tu lo quieres por líneas.

Eso es todo!

Saludos!

Re: Ayuda con listado de arrays

Publicado: 22 Nov 2013, 21:48
por Machine
Gracias nuevamente! Lo que yo necesito es que esos nombres de usuarios se escriban en otro programa.

La funcion del programa que he creado es para logear varias usuarios en un programa en particular. En vez de escribirlos en un texto, necesito que esos nombres de usuarios se escriban en otro lado de a uno por vez.

Código: Seleccionar todo

MouseClick("left",1910,60 + $salto2*$cont,2,0)
Send("^c")
MouseClick("left",2370 - $salto*$cont,1420,1,0)  ;AQUI SELECCIONA EL PROGRAMA EN LA BARRA DE TAREAS
Sleep(100)
MouseClick("left",1285,541,1,6)  ;AQUI HACE CLICK DONDE SE PONE EL NOMBRE DE USUARIO
Send("^v") ;AQUI ESCRIBE UN SOLO NOMBRE DE USUARIO
$cont = $cont+1

Re: Ayuda con listado de arrays

Publicado: 22 Nov 2013, 22:46
por arkcrew
Buenas,

Seré breve, no he entendido nada. JAJAJAJAJAJAJAJJA.

Quieres enviarlos a otro programa, pero de que manera?? escribirlos en la interfaz del programa? Si es así mirate el ControlSend y el ControlSetText. Si no, agradecería te explicases lo mejor posible, que no me entero!! :smt009

Saludos!

Re: Ayuda con listado de arrays

Publicado: 23 Nov 2013, 01:10
por Dany
Puedes hacer algo asi

Código: Seleccionar todo

#include <File.au3>

Local $amyarray,$x
If Not _FileReadToArray("1.txt", $amyarray) Then
    MsgBox(4096, "Error", " Ups un error leyendo el archivo" & @error)
    Exit
EndIf

For $x = 1 To $amyarray[0]
;aqui va el codigo para enviar los datos
Next
pero mejor di a que programa quieres colocar los datos porque hacerlo con ctrl+c y ctrl+v es algo muy burdo teniendo en cuenta la potencia de autoit. :smt027

Re: Ayuda con listado de arrays

Publicado: 23 Nov 2013, 22:53
por Machine
Gracias por su ayuda! Usando For Next escribe los textos todos seguidos, lo que necesito es que el programa
realice los clicks para selecionar el soft para loguearse, ingrese el usuario1,
realice clicks para selecionar el segundo soft para loguearse, ingrese usuario2

Que almacene los datos de los usuarios y que los vaya escribiendo de a uno pero realizando acciones en medio.

Re: Ayuda con listado de arrays

Publicado: 24 Nov 2013, 00:40
por arkcrew
Buenas,

A ver, es una cuestión de orden de ideas.

1. Quieres escribir
2. Quieres leer los usuarios
3. Quieres insertarlos

Si sabes que son 19 registros, puedes hacer lo siguiente: lees con el codigo de Dany a un array y luego te metes en el bucle for que los recorra y dentro del bucle al mismo tiempo los inserte.

Esquema:

Local $array[XX] -> Lo has leido con el codigo que te postearon y lo almacenas aqui
For .... to ....
ControlSetText(ControlDelGui, $array[x])
next

Explicado brevemente, lo que haces es ir recorriendo el array e ir enviando a la interfaz que sea los datos para el login, en caso de ser usuario y clave lo que almacenes, debes recorrer el bucle de dos en dos

For .... to .... step 2
ControlSetText(ControlDelGui, $array[x])
ControlSetText(ControlDelGui, $array[x+1])
next

No se si me estoy explicando..

Para "realizar acciones en medio" como bien dices, no tienes más que meterlas en mitad del bucle macho, no tiene más ciencia, imaginate que tengo un bucle y quiero que cada vez se ejecute un mensaje y un traytip, pues nada más lo meto en el for. Ejemplo:

For $a = 0 to 5 step 1
msgbox(0,"Titulo","Aqui el mensaje")
trayTip("Hola","Aqui el tray",1,1)
next

No tiene más complicación!!

Saludos!

Re: Ayuda con listado de arrays

Publicado: 24 Nov 2013, 01:44
por Machine
Genial! Y como tendria que escribir los nombres de los usuarios en el 1.txt? Me parece que ahi es donde me estoy equivocando

Re: Ayuda con listado de arrays

Publicado: 24 Nov 2013, 02:28
por Machine
Listo, el archivo 1.txt esta escrito como corresponde pero, cuando escribo Send ($aArray[$x o el numero que sea]) no pasa nada, solo me funciona el codigo con MsgBox

Re: Ayuda con listado de arrays

Publicado: 24 Nov 2013, 11:47
por arkcrew
A ver, me hiciste caso con lo de mirar la ayuda? No verdad?, si la hubieses mirado habrías visto que el send funciona cuando el control al que vas a enviar el texto está activo, osea con el puntero dentro listo para escribir.

Como no me has leido bien, se te ha debido pasar los dos controles que te puse: ControlSetText() o ControlSend() que te publiqué anteriormente.
Miralos en la ayuda (Pulsando F1) que sale con ejemplos.

Si tan empeñado estás en usar el send, primero debes activar la ventana a la que vas a enviar los datos (WinWaitActive, WinActivate , miralos en la ayuda), para ello autoit trae una herramienta muy útil para ver los controles de las interfaces (Autoit Window Info).

Con eso activas la ventana y envías los datos.

Espero que me haya explicado con claridad.

Saludos!

Re: Ayuda con listado de arrays

Publicado: 25 Nov 2013, 19:56
por Machine
He podido hacerlo! El codigo quedo asi

Código: Seleccionar todo

$cont=0
$salto=124

For $x = 1 To $aArray[0]
MouseClick("left",2370 - $salto*$cont,1420,1,0)
Sleep(100)
MouseClick("left",1285,541,1,6)
Send ($aArray[$x])
Sleep(100)

$cont = $cont+1
Next

global $num_elem = 19
global $arr[$num_elem]

While $cont < $num_elem

Wend
Gracias a todos por la ayuda!

Re: Ayuda con listado de arrays

Publicado: 25 Nov 2013, 22:02
por arkcrew
Buenas,

Te comento algo, los MouseClicks trabajan con coordenadas. ¿Que quiere decir?. Facil, probablemente si cambie tu resolucion o el GUI del programa se mueva de posicion, no te va a funcionar, es más, cualquier alerta que salga mientras tengas el programa en ejecución te va a causar problemas. Mirate los controles que te dije (WinActivate, controlSend etc..) que probablemente hagan tu código más eficaz.

De todas formas me alegro qeu te funcione!

Saludos!

Re: Ayuda con listado de arrays

Publicado: 28 Ene 2014, 23:04
por wbueso
;Puedes usar
Run("Programa")
; O
ShellExecute("Programa")
;Para ejecutar el programa si es un programa

;luego usa esto WinWaitActive para verificar la ventana en donde quieres trabajar
WinWaitActive("Titulo de la ventana activa","Texto relacionado con el Inputbox o checkbox")

;Puedes usar WinActivate para poner la ventana en modo activo
WinActivate("Titulo de la ventana activa","Algun texto que relacione a la ventana")

;despues ControlClick para seleseleccionar el cuadro o inputbox donde quieres escribir o que boton quieres apretar
ControlClick("Titulo de la ventana","Algun texto que relacione a la ventana","ID del boton o InputBox")

;para identificar el ID del InputBox, caja d etexto o del boton usa la herramienta de AutoIt AU3Info

;Ahora usa SEND para lo que vas a escribir
Send("Usuario") ;Si es texto el que quieres colocar
Send("!N") ;Si quieres enviar Ctrl + N
;pero si deseas indicar que tecla quieres apretar en el teclado es asi
;Send("{Tab}") ,Send("{ENtER}") ,Send("{Tab}") ,Send("{Space} ,etc

;Repite estos pasos para todos los InputBox, checbox, List, Menú, radio o botones

;Este es un ejemplo del como instalo el Office 2003 con licencia y configuraciones

Código: Seleccionar todo

Run("OFFICE\SETUP.EXE")
Sleep(500)

WinActivate("Programa de instalación de Microsoft Office 2003", "Clave del producto")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Clave del producto:")
ControlClick("Programa de instalación de Microsoft Office 2003", "Clave del producto", "Edit1") ;Esto selecciona el cuadro
Sleep(250)
Send("GWH28DGCMPP6RC46J4MT3HFDY")  ;Esto es lo que se escribe en el cuadro antes seleccionado

WinActivate("Programa de instalación de Microsoft Office 2003", "Clave del producto")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Siguiente >")
ControlClick("Programa de instalación de Microsoft Office 2003", "Clave del producto", "Button1") ;Esto aprieta el boton siguiente
Sleep(1000)
WinActivate("Programa de instalación de Microsoft Office 2003", "Información del usuario")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Siguiente >")
Sleep(1000)
ControlClick("Programa de instalación de Microsoft Office 2003", "Información del usuario", "Button1")

WinActivate("Programa de instalación de Microsoft Office 2003", "Contrato de licencia para el usuario final")
WinWaitActive("Programa de instalación de Microsoft Office 2003","A&cepto los términos del Contrato de licencia")
ControlClick("Programa de instalación de Microsoft Office 2003", "Contrato de licencia para el usuario final", "Button1")

WinActivate("Programa de instalación de Microsoft Office 2003", "Contrato de licencia para el usuario final")
WinWaitActive("Programa de instalación de Microsoft Office 2003","A&cepto los términos del Contrato de licencia")
ControlClick("Programa de instalación de Microsoft Office 2003", "Contrato de licencia para el usuario final", "Button2")

WinActivate("Programa de instalación de Microsoft Office 2003", "Tipo de instalación")
WinWaitActive("Programa de instalación de Microsoft Office 2003","Instalación perso&nalizada")
ControlClick("Programa de instalación de Microsoft Office 2003", "Tipo de instalación", "Button5")

WinActivate("Programa de instalación de Microsoft Office 2003", "Tipo de instalación")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Siguiente >")
ControlClick("Programa de instalación de Microsoft Office 2003", "Tipo de instalación", "Button7")

WinActivate("Programa de instalación de Microsoft Office 2003", "Instalación personalizada")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Elegir personalización avanzada de aplicaciones.")
ControlClick("Programa de instalación de Microsoft Office 2003", "Instalación personalizada", "Button8")

WinActivate("Programa de instalación de Microsoft Office 2003", "Instalación personalizada")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Elegir personalización avanzada de aplicaciones.")
ControlClick("Programa de instalación de Microsoft Office 2003", "Instalación personalizada", "Button9")

WinActivate("Programa de instalación de Microsoft Office 2003", "")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Siguiente >")
Sleep(750)
Send("{Space}")
Sleep(250)
WinActivate("Programa de instalación de Microsoft Office 2003", "")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Siguiente >")
Sleep(750)
Send("{Down 2}")
Sleep(250)
WinActivate("Programa de instalación de Microsoft Office 2003", "")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Siguiente >")
Sleep(750)
Send("{ENtER}")

WinActivate("Programa de instalación de Microsoft Office 2003", "Personalización avanzada")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Siguiente >")
ControlClick("Programa de instalación de Microsoft Office 2003", "Personalización avanzada", "Button1")
Sleep(1000)
WinActivate("Programa de instalación de Microsoft Office 2003", "Resumen")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Instalar")
Sleep(1000)
ControlClick("Programa de instalación de Microsoft Office 2003", "Resumen", "Button1")

WinActivate("Programa de instalación de Microsoft Office 2003", "Instalación finalizada")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Eliminar archivos de instalación")
ControlClick("Programa de instalación de Microsoft Office 2003", "Instalación finalizada", "Button1")

WinActivate("Programa de instalación de Microsoft Office 2003", "Instalación finalizada")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Finalizar")
ControlClick("Programa de instalación de Microsoft Office 2003", "Instalación finalizada", "Button2")

WinActivate("Programa de instalación de Microsoft Office 2003", "¿Está seguro de que desea quitar de la caché el origen de la instalación?")
WinWaitActive("Programa de instalación de Microsoft Office 2003","&Sí")
ControlClick("Programa de instalación de Microsoft Office 2003", "¿Está seguro de que desea quitar de la caché el origen de la instalación?", "Button1")