GUI que controla otro programa[SOLUCIONADO]

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
mitchito
Mensajes: 8
Registrado: 17 Feb 2012, 10:56

GUI que controla otro programa[SOLUCIONADO]

Mensaje por mitchito »

Buenos días,

soy nuevo en el foro y en este lenguaje, así que pido perdón si la duda es demasiado básica. Resulta que estoy programando un GUI que tiene que controlar un programa ya dado, para que tenga una mejor presentación lo tengo como "Always on top".
He creado un botón inicio que inicializa el programa con los ajustes que necesito por defecto pero luego necesito que el user pueda meter valores en mi GUI y que se cree un diálogo entro mi GUI y el programa a controlar.
Consigo pasarle el valor que introduzco pero como el "focus" no esta sobre el programa a controlar no lo asimila como dato.
Cuando manualmente uso el programa tengo que pulsar enter una vez introducido el valor, pero no lo puedo hacer con AutoIt ya que le paso el valor mediante ControlSetText.

Alguna idea??

Gracias de antemano :)
Última edición por mitchito el 20 Feb 2012, 18:41, editado 1 vez en total.
Avatar de Usuario
chekok
Hacker del Foro
Mensajes: 111
Registrado: 16 Sep 2011, 11:50
Ubicación: Valencia / España
Contactar:

Re: GUI que controla otro programa

Mensaje por chekok »

Puedes dejar algo de código de ejemplo de lo que estás haciendo?

Así será más fácil poder echarte una mano al respecto, si alguien puede ayudarte, sin duda los compañeros del foro lo harán.

Un saludo y bienvenido al foro.
La vida es larga y dura.
mitchito
Mensajes: 8
Registrado: 17 Feb 2012, 10:56

Re: GUI que controla otro programa

Mensaje por mitchito »

Bueno os dejo el código, pero quizás sería más importante el código del programa a controlar pero no lo tengo :S
El botón de inicio me va bien, el tema es que una vez inicializado cuando quiero pasarle al programa un dato(botón load) ya pasa de mi. Es decir, que lo escribe pero debería darle a enter después y no puedo

Código: Seleccionar todo

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $INICIO      ;al pulsar el boton INICIO
             
		#region ---Au3Recorder generated code Start (v3.3.7.0)  ---
		Run('AD9956Ev.exe')

       ;Pongo los settings que quiero al inicio:
	
        	WinActive("classname=ThunderRT6FormDC","")
		Sleep(1100)
		;pasamos la pantalla de inicialización, hay q esperar o se traga el ENTER
		Send("{ENTER}")
		;Configuramos la freq de referencia a la q queremos q oscile 2450MHz
		WinActive("AD9956 Evaluation Software Rev. 1.0.0","DUT Signals Window..")
                   ...
                   ...
                   ...
		Cargar()

		#endregion --- Au3Recorder generated code End ---
	
               Case $LOAD ;aqui es donde tengo el problema
			
			ControlSetText ( "AD9956 Evaluation Software Rev. 1.0.0", "Linear Sweep Setup W", "[CLASS:ThunderRT6TextBox; INSTANCE:15]", "26")
			Cargar()

		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd


Func Cargar()
	ControlClick("AD9956 Evaluation Software Rev. 1.0.0", "Linear Sweep Setup W", "[CLASS:ThunderRT6CommandButton; INSTANCE:2]")
EndFunc
mitchito
Mensajes: 8
Registrado: 17 Feb 2012, 10:56

Re: GUI que controla otro programa

Mensaje por mitchito »

He encontrado una solución a mi problema, he hecho un ControlFocus y luego un Send({ENTER}) y arreglado.
Que fácil es cuando lo ves hecho jejeje
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: GUI que controla otro programa[SOLUCIONADO]

Mensaje por Ximorro »

Hola,
me alegro de que ya lo hayas solucionado. Por si sirve para otra decirte que estas funciones que interactúan con controles de otras ventanas a veces tienen problemas si la otra ventana está minimizada o simplemente si no tiene foco. Así que para asegurarse es mejor dar foco a la ventana. Después de eso no es necesario dar foco al control si luego usas ControlClick, ControlSend o ControlSetText, aunque sí hará falta si haces Send.

Una cosa, en vez de hacer un WinActive con un Sleep (que puede fallar si no aciertas con el tiempo) puedes usar WinWaitActive, de esa manera el programa espera justo lo que necesita hasta que la otra ventana está activa. Además puedes poner un timeout por si hay algún error y la ventana no se activa nunca.
Es el comando típico después de abrir un programa o después de un WinActivate, para esperar a que la apertura o la activación se hayan realizado.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder