Página 1 de 1

GUI que controla otro programa[SOLUCIONADO]

Publicado: 17 Feb 2012, 11:58
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 :)

Re: GUI que controla otro programa

Publicado: 17 Feb 2012, 12:47
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.

Re: GUI que controla otro programa

Publicado: 17 Feb 2012, 18:42
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

Re: GUI que controla otro programa

Publicado: 20 Feb 2012, 12:41
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

Re: GUI que controla otro programa[SOLUCIONADO]

Publicado: 21 Feb 2012, 08:56
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.