Macro AutoHockey´s

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Winer1
Mensajes: 26
Registrado: 20 Jun 2011, 21:32

Macro AutoHockey´s

Mensaje por Winer1 »

Hola a Todos

Mira quisiera hacer una consulta.

Quiero Hacer una Macro de AutoHockey´s en apariencia sencillo es decir lo que quiero que haga es lo Siguiente:

* Que sea para un cliente(No se si es asi el caso es que aunque no este la ventana frente ami(que yo ande por otra ventanas y el macro siga su trabajo).
* Que cada x tiempo mande un Hockey(Ejemplo F1).
* Que cada x tiempo Envie otro Hockey(Ejemplo F2).
* Que cada x tiempo active un sonido para que vaya a revisar que todo ande viento en popá.


Bueno yo lo veo muy dificil de hacer almenos para mi que no he hecho jamas algo asi y que se muy poco sobre dicho lenguaje quisiera saver que tanto me podrian ayudar o enseñar de ante mano Gracias.

PD1: Soy ultra nuevo en esto y encontre esta pagina y me parecio que serviria de mucho.

PD2: Anduve viendo lo de la macro y pues ya hice que funciona pero el codigo es muy grande y leiendo otros temas encontre que la puedo reducir pero nose como el codigo es el siguiente:

Código: Seleccionar todo

WinWait, Tibia, 
IfWinNotActive, Tibia, , WinActivate, Tibia, 
WinWaitActive, Tibia, 
Sleep, 3000
Send, {ENTER}
Sleep, 3000
Send, {CTRLDOWN}{UP}{CTRLUP}
Sleep, 3000
Send, {F1}
Sleep, 3000
Send, {F1}
Sleep, 3000
Send, {F1}
Sleep, 168000
Send, {F1}
Sleep, 3000
Send, {F1}
Sleep, 3000
Send, {F1}
Sleep, 168000
Send, {F1}
Sleep, 3000
Send, {F1}
Sleep, 3000
Send, {F1}
Sleep, 168000
Send, {F1}
Sleep, 3000
Send, {F1}
Sleep, 3000
Send, {F1}
Sleep, 3000
Send, {F3}
Sleep, 3000
Send, {F3}
Sleep, 3000
Send, {F3}
Sleep, 3000
Send, {F3}
Sleep, 3000
Send, {F3}
Sleep, 168000
El Codigo tiene 74 lineas pero yo lo deje hasta ahi porque hasta mas o menos es lo que quiero que haga y luego que se vuelva a repetir como un ciclo.

Saludos :smt028
Avatar de Usuario
ms999
Hacker del Foro
Mensajes: 116
Registrado: 26 Ene 2011, 06:13

Re: Macro AutoHockey´s

Mensaje por ms999 »

hola y bienvenido al foro de AutoIt lo que queres hacer es muy posible.
lo primero que veo en tu script es que debes tener una version vieja de SciTe, la syntaxis ha cambiado bastante y es mas comoda
lo segundo que te diria seria que trates de encontrar una logica para poder resumir el script, podes poner todo dentro de un bucle con temporizadores y dentro del bucle con una condicion if checkee si el temporizador llego a tal tiempo entonces mande la tecla y luego resetee el contador, eso te puede resumir el script a mucho menos de un cuarto de lo que tenes ahora.
tercero, no entiendo si la ventana que reciba la tecla debe estar activada o no al momento de recivir la tecla, se podria llamar al momento justo para recibir la tecla y luego minimizarce.
Yo te recomendaria empezar por bajarte la ultima version de SciTE, por aca en este foro podras encontrar una version en español de SciTe sino la version en ingles del foro oficial de AutoIt
Luego fijate si puedes explicar mejor cuanto tiempo hay que esperar para mandar cada tecla.
Si me aclaras esas cosas te podra ayudar
Winer1
Mensajes: 26
Registrado: 20 Jun 2011, 21:32

Re: Macro AutoHockey´s

Mensaje por Winer1 »

Bueno.

Primero
Si es posible que la ventana no este activa al momento de hacerlo.(si no es posible entonces lo que dices que la ative aga la accion y la desactive asi para que pueda continuar navegando.)

Segundo.

Quiero mas o menos estos tiempos.

Cuando entre y active el Macro que espere unos 3 segundos y accione F1 y asi repetido 3 veses ejemplo:
Sleep, 3000 (3.00)
Send, {F1}
Sleep, 3000 (3.00)
Send, {F1}
Sleep, 3000 (3.00)
Send, {F1}

luego que espere 28 segundos y se repita el siclo asi durante 10 minutos y entonces entre la siguiente hockey asi
Sleep, 3000 (3.00)
Send, {F3}
Sleep, 3000 (3.00)
Send, {F3}
Sleep, 3000 (3.00)
Send, {F3}
Sleep, 3000 (3.00)
Send, {F3}
Sleep, 3000 (3.00)
Send, {F3}

y luego que se repita el ciclo sucesivamente hasta que yo decida pararlo espero me entiendas.
Avatar de Usuario
ms999
Hacker del Foro
Mensajes: 116
Registrado: 26 Ene 2011, 06:13

Re: Macro AutoHockey´s

Mensaje por ms999 »

Si vos ves funcion por funcion, paso a paso lo que vas necesitando y haciendo vas a aprender y vas a poder hacerlo como vos quieras y editarlo o modificarlo a tu gusto... Esta es mi version quiza te ayude a ver una manera de hacerlo, y algunas funciones que te sirvan y algunos trucos... quiza te convenga la version de 70 y pico de lineas o quiza prefieras algo como esto que hice, eso ya es cosa de gustos. ;) bienvenido denuevo y decime si algo no va...

PD bajate la ultima version de AutoIt y el editor SciTe

Código: Seleccionar todo

HotKeySet("^s", "_Pausa") 			; Aca Configuras la HotKey para activar la
									; Funcion _StartPause() con "Ctrl+S"
HotKeySet("^r", "_Reiniciar") 		; HotKey para Funcion Reiniciar "Ctrl+r"
HotKeySet("{ESC}", "_Exit")			; HotKey para terminar "Escape"
Global $Pausado = False 			; Esto lo usaremos para pausar la funcion
Global $Check = 0 					; Esto lo usaremos para controlar las tre primeras veces
									; que tiene que mandas F1
_start()
Func _Start()
	$Timer = TimerInit()
	While Not $Pausado; And WinExists("Tibia")    ; Esto esta comentado  con ; porque yo no tengo el programa
;~ 		consolewrite(TimerDiff($Timer)&@CRLF)
		Sleep(100)
		If TimerDiff($Timer) >= 3000 And $Check < 3 Then
			Send("{F1}")
;~ 			consolewrite("A" &TimerDiff($Timer)&@CRLF) ; Esto esta comentado porque fue una prueba mia
			$Timer = TimerInit()
			$Check += 1
		EndIf
		If $Check = 3 Then 						; si ya hizo los tres primeros F1
;~ 			Sleep(28000) 						; Espera 28 segundos
			$Timer = TimerInit() 				; ponemos el contador
			$Timer2 = TimerInit() 				; Ponemos otro contador para los 10 minutos
			While TimerDiff($Timer2) <= 600000 And Not $Pausado ; mientras hayan pasado menos de 10 minutos y no este pausado
				If TimerDiff($Timer) >= 3000 Then
					Send("{F3}")
;~ 					consolewrite("B" &TimerDiff($Timer)&@CRLF) ; Esto esta comentado porque fue una prueba mia
					$Timer = TimerInit()
					If $check = 0 then exitloop
				EndIf
			WEnd
			$check = 0							; Resetea Check para que vuelva a hacer el primer ciclo
		EndIf
	WEnd
EndFunc   ;==>_Start
Func _Pausa() 	; Sacado de aca http://www.emesn.com/autoitforum/viewtopic.php?f=12&t=2557&p=10349&hilit=pausar#p10349
	If $Pausado Then
		$Pausado = False
	Else
		$Pausado = True
		While $Pausado ; Mientras este pausado solo hace sleep
			Sleep(1000)
		WEnd
	EndIf
EndFunc   ;==>_Pausa
Func _Reiniciar()
	$Timer = TimerInit()
	$check = 0
EndFunc	  ;==>_Reiniciar
Func _Exit()
	Exit
EndFunc   ;==>_Exit
Winer1
Mensajes: 26
Registrado: 20 Jun 2011, 21:32

Re: Macro AutoHockey´s

Mensaje por Winer1 »

He probado el macro pero no logro hacer que funcione en el programa solo funciona fuera del el cuando esta el programa se pone como pausado como puedo solucionar eso? por cierto en la funcion star te falto te equivocaste creo xD es asi no:

Código: Seleccionar todo

HotKeySet("^a", "_start")          ; Aca Configuras la HotKey para activar la
HotKeySet("^s", "_Pausa")         ; Funcion _StartPause() con "Ctrl+S"
Avatar de Usuario
ms999
Hacker del Foro
Mensajes: 116
Registrado: 26 Ene 2011, 06:13

Re: Macro AutoHockey´s

Mensaje por ms999 »

Yo lo probe haciendo que me escriba en la consola en vez de mandar F1 o F2(porque no tengo el programa) y funcionaba, quiza tengas que hacer eso de traer al frente la ventana...
puede ser que haya otra manera con controlsend() pero como no se cual es la funcion del programa o que es lo que haces cuando le mandas F1 no se si eso servira

EDIT: Traer la ventana cada tres segundos puede ser algo molesto, fijate si podes explicarme mas sobre el programa
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Macro AutoHockey´s

Mensaje por Ximorro »

Winer1, creo que puede haber una confusión. No es que tengas un Scite viejo, ¡es que eso no es AutoIt! :smt005
Tú estás hablando de AutoHotkey, que es otra cosa:
http://www.autohotkey.com/

Este foro es de AutoIt:
http://www.autoitscript.com/site/autoit/

Lo que quieres se puede hacer en AutoIt. Ahora bien, no sé si tu consulta es de AutoHotkey, y entonces estás en el foro equivocado, o es que quieres pasar ese código de AutoHoykey a Autoit, en ese caso pues sí podemos ayudarte, tal como amablemente está haciendo ms999, pero lógicamente él habla AutoIt, por eso si intentas ejecutarlo en AutoHoutkey te dará errores...
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Winer1
Mensajes: 26
Registrado: 20 Jun 2011, 21:32

Re: Macro AutoHockey´s

Mensaje por Winer1 »

Si quiero hacerlo mas simple ya que el autoHockey tengo que hacer lenguaje mas largo ademas el AutoIt me ayudara mas para otro tipo de trabajos que espero hacer a futuro.

En cuanto al codigo creo que me di a entender mal.

Lo que queria es que F1 hiciera esto:

Me conecto al Juego y activo el Macro entonces a los 3 segundos empiese la acción la cual ara 3 veces con un intervalo de 3 segundos entre cada una despues descansara 28 segundos y volvera a repetir el proseso durante 10 minutos. hasta ahí es sin nesesida de comida.
Y con F3 esto:
Despues de 10 minutos el macro, deveria de hacer un intervalo de 3 segundos y activar F3, 5 veces con un intervalo de 3 segundos y luego de terminar el proceso espera 28 segundos y empesarlo desde el principio como un ciclo. Resumido seria asi.

Me conecto, me acomo, consigo lo que ocupo etc. y activo el macro.

Pasan 3 seg. y empiesa F1 y pasan 3 seg. y otra vez F1 y y pasan 3 seg. y otra vez F1 y pasan 3 seg. y luego un intervalo de 28 segundos y se repite el proceso y ya que se repite el proceso otro intervalo de 28 segundos y asi durante 10 minutos. hazta aqui van los F1 trate de intentar modificar y reacomodar el Macro pero no logre mucho.

En cuanto a F3 seria algo asi despues de los 10 minutos de F1 hace un intervalo de 3 segundos y Activa F3 * 5 veces con un intervalo de 3 segundos(estre proceso lo lei en algun tema) y hace un intervalo de 28 segundos para volver al inicio que serian los F1 y asi hasta que pause o cancele el proceso. espero esto sirva para acomodarlo si supiera mas podria simplemente usar el F1 modificandolo yo solo pero como nose no pude hacer que simplemente el F1 continuara su curso durante 10 min y yo fuera a alimentar al PJ asi que nesesito su ayuda. Bueno Gracias por leer esto espero que no sea una molestia.

Gracias por la Bienvenida ms999 :smt028
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Macro AutoHockey´s

Mensaje por Ximorro »

Ah, entonces lo quieres pasar a Autoit. Entonces estás en el foro correcto. ¡Bienvenido!

No es molestia, hombre, al contrario, así explicadito es más fácil de seguir.

Como puedes ver las claves están en usar HotKeySet() para controlar los atajos de teclado, Sleep() para pausar el script un tiempo, y TimerInit-TimerDiff para saber cuándo ha pasado cierto tiempo, pero sin paralizar el script (por ejemplo como hace ms999 para comprobar si la ventana sigue existiendo y que no salta a pausa, mientras espera los 3 segundos después de enviar F1).

Y luego claro, las estructuras de control y organización de código, IF, WHILE, FUNC, etc...
Si nunca has visto antes AutoIt puedes empezar echando un vistazo a esta guía, que indica dónde está la información que habría que mirar para empezar y cómo sacar el máximo partido al foro:
http://www.emesn.com/autoitforum/viewto ... f=2&t=2593

Saludosss
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
ms999
Hacker del Foro
Mensajes: 116
Registrado: 26 Ene 2011, 06:13

Re: Macro AutoHockey´s

Mensaje por ms999 »

igual te lo repito, esa es una tarea para AutoIt :smt035 .
Te diria que si queres aprender podes primero hacer una version mas simple, pero larga como la de autohockey para aprenderte la sintaxis y a medida que ves como se usa una de la funciones que te dijo Ximorro, vayas viendo como aplicarlas.. quiza cometi un error al tratar de hacerlo tan resumido y especifico el primer script, ya que si es mas simple es mas facil de ver donde se modifica.
Winer1
Mensajes: 26
Registrado: 20 Jun 2011, 21:32

Re: Macro AutoHockey´s

Mensaje por Winer1 »

Encens ya tengo una idea hare un simple ciclo de F1 y cuando lo tenga te lo presneto aver quetal me quedo ok.. :smt041
Winer1
Mensajes: 26
Registrado: 20 Jun 2011, 21:32

Re: Macro AutoHockey´s

Mensaje por Winer1 »

Código: Seleccionar todo

HotKeySet("^a", "_start")          ; Aca Configuras la HotKey para activar la
HotKeySet("^s", "_Pausa")         ; Funcion _StartPause() con "Ctrl+S"
HotKeySet("^r", "_Reiniciar")       ; HotKey para Funcion Reiniciar "Ctrl+r"
HotKeySet("{ESC}", "_Exit")         ; HotKey para terminar "Escape"
Global $Pausado = False          ; Esto lo usaremos para pausar la funcion
Global $Check = 0                ; Esto lo usaremos para controlar las tre primeras veces
                           ; que tiene que mandas F1
_start()
Func _Start()
   $Timer = TimerInit()
   While Not $Pausado; And WinExists("Tibia")    ; Esto esta comentado  con ; porque yo no tengo el programa
;~       consolewrite(TimerDiff($Timer)&@CRLF)
      Sleep(3000)
      If TimerDiff($Timer) >= 3000 And $Check < 3 Then
         Send("{F1}")
;~          consolewrite("A" &TimerDiff($Timer)&@CRLF) ; Esto esta comentado porque fue una prueba mia
         $Timer = TimerInit()
         $Check += 1
	 EndIf
	 If $Check = 3 Then                   ; si ya hizo los tres primeros F1
                 Sleep(26000)                   ; 26 segundos porque al reiniciar el ciclo toma 3 asi que le he reducido 2 porque solo sera F1
			While
        $check = 0 ExitLoop                   ; Resetea Check para que vuelva a hacer el primer ciclo
		WEnd
Nose que es lo que tengo mal es todo lo que logre trate de varias formac hacer que el ciclo se repita sin embargo no pude decarge la ayuda pero no encontre una respuesta logica a porque no resetea el ciclo es pero me puedan decir que hehecho mal para aprender o que no he visto bueno gracias.
Responder