Página 1 de 1

Programa que pulse una tecla (bucle)

Publicado: 10 Mar 2010, 00:27
por aliarla
Hola, llevo a penas 2 horas mirandome los tutoriales del autoit pero no encuentro lo que quiero; mi intencion es hacer un script en el cual se pulse la tecla f12 automaticamente cada x segundos, de manera continuada; alguien me ayuda a empezar? . La tecla la tiene que pulsar en la ventana que os pongo debajo:

>>>> Window <<<<
Title: LastChaos - Gamigo (Window 800x600)
Class: Nksp
Position: 406, 108
Size: 806, 638
Style: 0x14CA0000
ExStyle: 0x00040100
Handle: 0x007503F0

>>>> Control <<<<
Class: ViewPort Window
Instance: 1
ClassnameNN: ViewPort Window1
Name:
Advanced (Class): [CLASS:ViewPort Window; INSTANCE:1]
ID:
Text:
Position: 0, 0
Size: 800, 600
ControlClick Coords: 306, 274
Style: 0x56000000
ExStyle: 0x00000000
Handle: 0x006F03D6

La ventana no se encontrara siempre en esta posicion, el programa debe funcionar de igual forma?

Gracias de antemano

Re: Programa que pulse una tecla (bucle)

Publicado: 10 Mar 2010, 01:57
por BasicOs
Para empezar algo tan sencillo puedes hacerlo con el grabador de macros del menu del SCITe, QUE TE genera el código automáticamente. También puedes practicar con funciones como WINACTIVATE() , If WinActive(), y SEND().
Muestranos un poco de código para ir viendo como lo vas creando,
Salu2:) :smt020

Re: Programa que pulse una tecla (bucle)

Publicado: 10 Mar 2010, 09:47
por Ximorro
BasicOS te ha dado las claves para hacerlo. Lo del grabador de macros de Scite no es mala idea, quizás te cree más código del que necesitas pero te mostrará qué funciones debes usar. Puedes partir de ahí y optimizarlo.

Como pareces muy nuevo (¿nueva?) en esto te daré un esquema de lo que habría que hacer (probablemente habrá otras maneras, esta es una), pero no te hago el código para que te lo curres un poco.

a) Mientras la ventana no está activa esperamos. No hay que hacer bucles, hay una función que lo hace: WinWaitActive.

b) Mandar F12 cada x segundos. Esto se hace con un bucle While, la condición del while sería por ejemplo que la ventana siga activa (con WinActive).
Dentro del while esperas x segundos con Sleep (el cual usa milisegundos) y envías el F12 con Send.

Por cierto, esas funciones que miran si la ventana está activa y similares pueden usar varias maneras de identificar la ventana. Una sería poner el título completo, pero corres el riesgo de que éste sea variable, por lo que veo éste incluye la resolución (Window 800x600), así que si lo ejecutas a 1024x768, por ejemplo, el script dejaría de encontrar la ventana.
Una manera de saltarse esto sería por ejemplo usar sólo el principio del título, que parece no variable: "LastChaos - Gamigo". La otra es usar la clase, es lo que tienes ahí como Class: Nksp, así que en vez del texto del título se pondría "[CLASS:Nksp]".

Hale si tienes problemas nos muestras el código que has hecho.

Re: Programa que pulse una tecla (bucle)

Publicado: 10 Mar 2010, 10:11
por aliarla
Ante todo muchas gracias por contestarme, el hecho de no haber programado nunca me esta dando quebraderos de cabeza, pero bueno, no importa. Os mando lo que tengo hecho, a ver que tal:

De momento presiona el f12 en cuanto lo ejecuto, y luego se cierra el script; a ver si consigo ponerle un temporizador en bucle. A ver si me podeis ayudar un poquito mas, jejeje.

Gracias compis

#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.6.0
Author: myName

Script Function:
Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here




#region --- Au3Recorder generated code Start ---
_WinWaitActivate("LastChaos - Gamigo (Window 800x600)","")
Send("{F12}")

#region --- Internal functions Au3Recorder Start ---
Func _WinWaitActivate($title,$text,$timeout=0)
WinWait($title,$text,$timeout)
If Not WinActive($title,$text) Then WinActivate($title,$text)
WinWaitActive($title,$text,$timeout)
EndFunc
#endregion --- Internal functions Au3Recorder End ---

#endregion --- Au3Recorder generated code End ---
#endregion --- Au3Recorder generated code End ---