¡AYUDA! Problema carga de variables en memoria

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Pickart
Mensajes: 2
Registrado: 06 Feb 2010, 21:05

¡AYUDA! Problema carga de variables en memoria

Mensaje por Pickart »

Ante todo un saludo para todos.

Soy un aficionado del autoit, y se me ha presentado este problema a la hora de gestionar variables.
Esto es una aplicación de prueba.

Mi intención es cargar en memoria el valor que le introduces en la casilla de entrada, por ejemplo una letra que quieres que escriba en un .txt

El problema que me encuentro es que me escribe ceros, en vez de la letra que le ponga en el campo de entrada y no soy capaz de descubrir porque, no sé si tengo todo planteado mal o si declaro mal las variables o un se xD. :smt021

Si alguien me pudiera echar una mano lo agradecería.

MODO DE USAR LA APLICACIÓN:

-Genera en el escritorio un txt con el siguiente nombre: juas.txt y dejarlo abierto
-Ejecutar la aplicación, asignar una tecla y pulsar iniciar
- con F10 tendría que empezar a escribir la letra que as introducido cada 1 segundo.
-con F9 se detiene la escritura.
-con Alt+F9 sales al menú de entrada y puedes poner otra letra.

Bueno eso es lo que intento que haga esta práctica pero solo consigo que escriba ceros

Os dejo aqui el codigo:

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $tecla1

Opt('MustDeclareVars', 1)

INICIO()

Func INICIO()
	Local $filemenu, $fileitem, $recentfilesmenu, $separator1
	Local $exititem, $helpmenu, $manual, $aboutitem, $okbutton
	;Local $tecla1
	Local $msg, $file
	#forceref $separator1

	GUICreate("2010", 300, 280)
	$filemenu = GUICtrlCreateMenu("Archivo")
	$separator1 = GUICtrlCreateMenuItem("", $filemenu)
	$exititem = GUICtrlCreateMenuItem("Salir", $filemenu)
	$helpmenu = GUICtrlCreateMenu("Ayuda")
	$manual = GUICtrlCreateMenuItem("Manual", $helpmenu)
	$aboutitem = GUICtrlCreateMenuItem("Acerca de", $helpmenu)
	GUICtrlCreateGroup("2010", 5, 5, 125, 140)
	GuiCtrlCreateLabel("Introduce la tecla que"& @CRLF &"quieres usar", 15, 30)

	GuiCtrlCreateLabel("Tecla:", 30, 82)
	$tecla1 = GuiCtrlCreateInput("v", 65, 80, 15, 20, $ES_CENTER)

	GUICtrlSetState(-1, $GUI_DROPACCEPTED)
	$okbutton = GUICtrlCreateButton("INICIAR", 50, 150, 200, 30)
	GuiCtrlCreatePic("", 0, 190, 300,68)
	GUISetState()

	While 1
		$msg = GUIGetMsg()
		Select
			Case $msg = $GUI_EVENT_CLOSE
				ExitLoop

			Case $msg = $exititem
				ExitLoop

			Case $msg = $okbutton
				GUIDelete()
				PAUSAR()

			Case $msg = $aboutitem
				MsgBox(0, "Acerca de", "2010")

		EndSelect
	WEnd

	Exit
EndFunc

PAUSAR()

Func FUNCION1()
	;Local $tecla1
	HotKeySet("{F9}", "Pausar")
	ToolTip("Pulsar: < Activo >", 0, 40)
	While 1
		ControlSend("juas.txt: Bloc de notas", "", "Edit1", GUICtrlRead($tecla1), 0)
		;ControlSend("juas.txt: Bloc de notas", "", "Edit1", "{v}", 0)
		Sleep(1000)
	WEnd
EndFunc

Func PAUSAR()
	;Global $Paused
	ToolTip("Pulsar: < Parado >", 0, 40)
	HotKeySet("!{F9}", "Inicio")
	HotKeySet("{F10}", "Funcion1")
	While 1
		Sleep(100)
	WEnd

EndFunc

Func SALIR()
	Exit
EndFunc
Un Saludo y gracias de antemano :smt039
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: ¡AYUDA! Problema carga de variables en memoria

Mensaje por Ximorro »

Al principio creía que estabas haciendo un keylogger, pero parece que no...

Pues por ejemplo... ¿seguro que la ventana del Bloc de notas se llama así?
A mí por ejemplo me pone "juas.txt - Bloc de notas" fíjate que no es un ":" sino un "-". Quizás si tienes Vista u otro es diferente, yo tengo XP, pero mira a ver si es eso...

Si ejecuto directamente
ControlSend("juas.txt - Bloc de notas", "", "Edit1", "hola", 0)
funciona perfectamente.
Por cierto, veo en la línea comentada que mandabas un "{v}", las llaves son para las teclas especiales, para mandar simplemente la v mejor pon "v".

Si eso te va será que hay algún problema con el Input, aunque la verdad es que no veo nada raro... ah bueno, un momento, mira que cuando presionas OK el formulario es borrado con GUIDelete, con lo que $tecla1 ¡ya no existe!. Por eso te manda ceros, en realidad te está dando un error.
Para solucionarlo, lo que menos cambios requiere es que antes de ese GUIDelete te guardes lo que hay en el Input en una variable global, y que el ControlSend use esa variable.
Otra opción sería no borrar el formulario, sólo ocultarlo, pero entonces hay que cambiar la estructura para que no se cree cada vez que se ejecuta INICIO(), ahí sólo debería mostrarse, no crearse.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Nahuel
Hacker del Foro
Mensajes: 194
Registrado: 27 Jun 2007, 23:32
Ubicación: Argentina
Contactar:

Re: ¡AYUDA! Problema carga de variables en memoria

Mensaje por Nahuel »

Ximorro tiene razón. Borrás el control antes de leerlo. Yo haría otro cambio:
Reemplazar

Código: Seleccionar todo

ControlSend("juas.txt: Bloc de notas", "", "Edit1", GUICtrlRead($tecla1), 0)
Por:

Código: Seleccionar todo

ControlSend("[CLASS:Notepad]", "", "[CLASS:Edit; INSTANCE:1]", GUICtrlRead($tecla1), 0)
De esa forma no dependés del título de la ventana.

Te hice las modificaciones que te dijo Ximorro, están marcadas con ;<=====

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $tecla1
Global $TeclaAEnviar  ;<=====================


Opt('MustDeclareVars', 1)

INICIO()

Func INICIO()
   Local $filemenu, $fileitem, $recentfilesmenu, $separator1
   Local $exititem, $helpmenu, $manual, $aboutitem, $okbutton
   ;Local $tecla1
   Local $msg, $file
   #forceref $separator1

   GUICreate("2010", 300, 280)
   $filemenu = GUICtrlCreateMenu("Archivo")
   $separator1 = GUICtrlCreateMenuItem("", $filemenu)
   $exititem = GUICtrlCreateMenuItem("Salir", $filemenu)
   $helpmenu = GUICtrlCreateMenu("Ayuda")
   $manual = GUICtrlCreateMenuItem("Manual", $helpmenu)
   $aboutitem = GUICtrlCreateMenuItem("Acerca de", $helpmenu)
   GUICtrlCreateGroup("2010", 5, 5, 125, 140)
   GuiCtrlCreateLabel("Introduce la tecla que"& @CRLF &"quieres usar", 15, 30)

   GuiCtrlCreateLabel("Tecla:", 30, 82)
   $tecla1 = GuiCtrlCreateInput("v", 65, 80, 15, 20, $ES_CENTER)

   GUICtrlSetState(-1, $GUI_DROPACCEPTED)
   $okbutton = GUICtrlCreateButton("INICIAR", 50, 150, 200, 30)
   GuiCtrlCreatePic("", 0, 190, 300,68)
   GUISetState()

   While 1
      $msg = GUIGetMsg()
      Select
         Case $msg = $GUI_EVENT_CLOSE
            ExitLoop

         Case $msg = $exititem
            ExitLoop

         Case $msg = $okbutton
            $TeclaAEnviar = GUICtrlRead($tecla1)  ;<=====================
			GUIDelete()
            PAUSAR()

         Case $msg = $aboutitem
            MsgBox(0, "Acerca de", "2010")

      EndSelect
   WEnd

   Exit
EndFunc

PAUSAR()

Func FUNCION1()
   ;Local $tecla1
   HotKeySet("{F9}", "Pausar")
   ToolTip("Pulsar: < Activo >", 0, 40)
   While 1
      ControlSend("[CLASS:Notepad]", "", "[CLASS:Edit; INSTANCE:1]", $TeclaAEnviar, 0)  ;<=====================
      ;ControlSend("juas.txt: Bloc de notas", "", "Edit1", GUICtrlRead($tecla1), 0)
      ;ControlSend("juas.txt: Bloc de notas", "", "Edit1", "{v}", 0)
      Sleep(1000)
   WEnd
EndFunc

Func PAUSAR()
   ;Global $Paused
   ToolTip("Pulsar: < Parado >", 0, 40)
   HotKeySet("!{F9}", "Inicio")
   HotKeySet("{F10}", "Funcion1")
   While 1
      Sleep(100)
   WEnd

EndFunc

Func SALIR()
   Exit
EndFunc
No soy un hombre de plegarias, pero si estás en el cielo sálvame por favor Superman!
Pickart
Mensajes: 2
Registrado: 06 Feb 2010, 21:05

Re: ¡AYUDA! Problema carga de variables en memoria

Mensaje por Pickart »

Holas

Gracias Ximorro y Nahuel, duda resuelta. :smt023

No había caído en que al cerrar la UI se me borraba la variable, juer
Pues pruebo vuestras soluciones, experimento un poco y os comento.

Muchas gracias sois unos fenómenos :smt041
Responder