Declaracion de Array

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Declaracion de Array

Mensaje por yasmany »

Hola con todos, he tomado un código perteneciente a Chefito y que muy bien me sirvió y lo adapté al mio, el cual es de cambiar de color el botón al momento de pasar el mouse, lo encontré en Scripts con el nombre de "Mis Funciones emular eventos" en este foro.
El problema se basa en que me pide que declare arrays pero no se como, sucede que todo marcha bien pero cuando hago clic en el boton desinstalar hay una linea que dice

ShellExecuteWait(@AppDataDir & "\Avy_Antivirus\Uninstall_avy.exe", "", "", "open")

Imagen

El cual al ejecutar la aplicación manualmente no hay ningún inconveniente en ella, pero si lo hago mediante el software creado presionando el boton desinstalar el problema se dá en la aplicación que lo ejecuta es decir en "Avy antivirus" botandome el siguiente error en consola

H:\Yasmany\TESIS - Anteproyecto Aprobado\Avy\Avy Source\Avy.au3 (1944) : ==> Subscript used with non-Array variable.:
If $pos[0] <= ($posicionObj[0] + $posicionObj[2]) And $pos[0] >= $posicionObj[0] And $pos[1] <= ($posicionObj[1] + $posicionObj[3]) And $pos[1] >= $posicionObj[1] Then
If $pos[0] <= ($posicionObj^ ERROR

Pero ya compilado y ejecutado es el siguiente que refiere a lo mismo

Imagen

Acontinuación indico como están declaradas las variables:

Código: Seleccionar todo

Global $aux[1][2] ;Está declarada como global porque tiene que mantener su valor. No puede perder su valor booleano.
Global $auxMovRaton = 0
Global $cambioColor, $auxTiempo = 1, $posAntX, $posAntY
Esta funcion verifica y compara la posición del mouse

Código: Seleccionar todo

Func EventoSobreObjeto($TituloVentana, $EventoObjeto) ;Devuelve 1 si entra y 0 si sale del objeto EXTERNA?
	Local $posicionObj, $pos
	$posicionObj = ControlGetPos($TituloVentana, "", $EventoObjeto) ;Captura las medidas y posicion del objeto y los almacena en una matriz.
	$pos = MouseGetPos() ;Obtenemos la posición x,y del ratón y la introducimos en esta variable
	If WinActive($TituloVentana) Then ;Si está activa la ventana del programa realiza la acción.
		$n = 0
		While 1
			If $aux[$n][0] = $EventoObjeto Then ExitLoop
			If $aux[$n][0] = "" Then
				$aux[$n][0] = $EventoObjeto
				ExitLoop
			EndIf
			$n = $n + 1
			If $n = UBound($aux) Then
				ReDim $aux[$n + 1][2]
				$aux[$n][0] = $EventoObjeto
				ExitLoop
			EndIf
		WEnd
		;Observa si el cursor sale o entra del objeto.
		If $pos[0] <= ($posicionObj[0] + $posicionObj[2]) And $pos[0] >= $posicionObj[0] And $pos[1] <= ($posicionObj[1] + $posicionObj[3]) And $pos[1] >= $posicionObj[1] Then
			If $aux[$n][1] = False Then ;utilizo una matriz auxiliar (en casi todas las funciones) para que solo retorne un valor, que no este continuamente enviando este valor.
				$aux[$n][1] = True
				Return 1
			EndIf
		Else
			If $aux[$n][1] = True Then
				$aux[$n][1] = False
				Return 2
			EndIf
		EndIf
	EndIf
	Return ""
EndFunc   ;==>EventoSobreObjeto
esta funcion realiza el cambio de color en referencia a la función anterior

Código: Seleccionar todo

Func labelColor($boton)
	$cambioColor = EventosobreObjeto("Avy Antivirus", $boton)

	If $cambioColor = 2 Then

		If GUICtrlRead($boton) = "_" Then
			GUICtrlSetBkColor($boton, 0x535f6d)
		ElseIf GUICtrlRead($boton) = "X" Then
			GUICtrlSetBkColor($boton, 0xD70000)
		ElseIf GUICtrlRead($boton) = "Abrir unidad" Then
			GUICtrlSetBkColor($boton, 0x767e87)
		ElseIf GUICtrlRead($boton) = "Desinstalar" Then
			GUICtrlSetBkColor($boton, 0x767e87)
		ElseIf GUICtrlRead($boton) = "Activar" Then
			GUICtrlSetBkColor($boton, 0x767e87)
		ElseIf GUICtrlRead($boton) = "Actualizar" Then
			GUICtrlSetBkColor($boton, 0x767e87)
		ElseIf GUICtrlRead($boton) = "Instalar" Then
			GUICtrlSetBkColor($boton, 0x767e87)
		Else
			If GUICtrlGetState($boton) = 80 Then
				GUICtrlSetBkColor($boton, 0x535f6d)
			EndIf
		EndIf

	ElseIf $cambioColor = 1 Then

		If GUICtrlRead($boton) = "_" Then
			GUICtrlSetBkColor($boton, 0x666666)
		ElseIf GUICtrlRead($boton) = "X" Then
			GUICtrlSetBkColor($boton, 0xFF0000)
		ElseIf GUICtrlRead($boton) = "Salir" Then
			GUICtrlSetBkColor($boton, 0xD70000)
		Else
			If GUICtrlGetState($boton) = 80 Then
				GUICtrlSetBkColor($boton, 0xFDA502)
			EndIf
		EndIf

	EndIf
EndFunc   ;==>labelColor
El siguiente codigo esta en constante ejecucion para capturar alguna accion y poder cambiar de color los botones.
Aqui ya identifico los botones que quiero que cambie y tambien leo el texto de ciertos botones para darle un color diferente.

Código: Seleccionar todo

While 1
		labelColor($btnAnalizar)
		labelColor($btnDesinfectar)
		labelColor($btnSalir)
		labelColor($lblminimizar)
		labelColor($lblcerrar)
		labelColor($abrirUnidad)
		labelColor($Actualizar)
		labelColor($Desinstalar)
		labelColor($DetalleWindows)
		labelColor($Activar)
		labelColor($Acercadeavy)
		labelColor($ayuda)
		labelColor($Instalar)
		actualizarComboDeUnidades()

		$nMsg = GUIGetMsg()
		Switch $nMsg

			Case $GUI_EVENT_CLOSE
				If $nMsg = $GUI_EVENT_CLOSE Then					
						Exit
		EndSwitch
	WEnd
Como debería declarar las variables?
Espero su pronta ayuda, desde ya muchas gracias.
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Declaracion de Array

Mensaje por PDF »

Hola..
Puedes probar utilizando la variable que contiene el handle de la ventana en lugar del titulo aquí:

Código: Seleccionar todo

$cambioColor =EventosobreObjeto("Avy
 Antivirus", $boton) ; reemplaza "Avy
 Antivirus" por la variable que devuelve GuiCreate 
Probablemente en alguna parte cambias el titulo y ahí surge el problema, cuando

Código: Seleccionar todo

$posicionObj = ControlGetPos($TituloVentana, "", $EventoObjeto)
no devuelve ningun valor porque la ventana no es identificada con ese titulo...

Otra cosa cuando declaras Global $aux[1][2], lo que estas haciendo es utilizar esa variable en todo el script, no significa que tenga que mantener su valor, además ese array auxiliar lo utilizas, como dice la linea comentada, para que solo retorne un valor, que no este continuamente enviando el mismo valor, y así no quede parpadeando el control..

Saludos...
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Declaracion de Array

Mensaje por yasmany »

Mil Gracias PDF tu ayuda me sirvió :smt026 mi problema se situaba en el nombre de la ventana :smt021
En algunas partes no he cambiado el nombre de la ventana tal como lo renombré luego.
Muy agradecido por tu ayuda y gracias por la sugerencia de utilizar el handle de la ventana. :smt001 :smt024
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Declaracion de Array

Mensaje por PDF »

Cuando gustes! Estamos para ayudar, veo que estas trabajando en un gran proyecto, a ver si compartes con el foro tu programa cuando acabes :smt002 éxitos!
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Declaracion de Array

Mensaje por yasmany »

Bueno pues claro, con vosotros he aprendido muchas cosas, les he de facilitar el software con clave personal para evitar el plagio, siempre y cuando lo soliciten, para algunos a de resultar sencillo, pero para mi me ha tomado bastante tiempo en realizarlo y se ha complicado en ciertas partes. :smt021
En cuanto lo termine envío, a los que estan siendo parte de mi formación en aprender este lenguaje. :smt001
Y posterior el codigo para recibir mejoras del mismo, esto por inbox ya que no todos los usuarios tendrán un buen proposito y por ende puede haber mal uso del code, aunque la mayoria sobre pasa mis conocimientos pero es para ahorrarme inconvenientes y disgustos. :smt024
Saludos y gracias una vez mas.
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Declaracion de Array

Mensaje por PDF »

Ahh, vaya! Es una aplicación con licencia en la que estas trabajando, pues claro hay que evitar disgustos, lamentablemente en AutoIt aun no podemos evitar la decompilación :smt022 pero bueno... Estamos para ayudar a mejorar cuando quieras... Saludos! :smt023 :smt026
Avatar de Usuario
chekok
Hacker del Foro
Mensajes: 111
Registrado: 16 Sep 2011, 11:50
Ubicación: Valencia / España
Contactar:

Re: Declaracion de Array

Mensaje por chekok »

Sobre el tema de evitar la decompilación en Autoit podemos abrir un tema. Existen muchas maneras de proteger el .exe frente a la decompilación y así evitar que mentes malintencionadas puedan ver nuestro código o simplemente protegerlo para evitar su uso por terceros sin pagar la licencia correspondiente.

Este es un tema importantísimo para aquellos que desarrollan aplicaciones comerciales, ya que de ello depende su negocio.
La vida es larga y dura.
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Declaracion de Array

Mensaje por Dany »

Existen muchas maneras. Igual siempre se puede aplicar Ing. Inversa.



Saludos :smt027
  • ............................................Imagen
    ......................................Imagen
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Declaracion de Array

Mensaje por PDF »

Existe un tema en el foro que trata sobre como proteger el codigo fuente aquí http://www.emesn.com/autoitforum/viewto ... 369&p=9539

Y efectivamente en cualquier lenguage de programación es imposible evitar que se decompile un programa, se puede ofuscar para hacerlo inentendible.. Al menos para aquellos que no tengan conocimientos avanzados de programación.. :smt021
Última edición por PDF el 19 May 2014, 16:06, editado 1 vez en total.
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Declaracion de Array

Mensaje por yasmany »

De aplicar la Ingeniería Inversa ese conocimiento no está al alcance de todos los usuarios "normales" por lo cual si el software es distribuido en una pequeña localidad de 5.000 a 10.000 habitantes no suele ser peligro de plagio del sw, pero aun asi se corre riesgo alguno.
Pero bueno dentro del Scite existe una opción de ofuscador, va referido al tema o trata de una opción diferente a lo de proteger el code?
Aprovechando este "hilo" una preguntica, en donde se debe ubicar el archivo de Uninstall para que aparezca en la lista de programas de windows para poder desinstalarlo?
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Declaracion de Array

Mensaje por PDF »

De hecho existen decompiladores que se encuentran a disposición de un usuario normal, por ello es bueno aplicar un ofuscador para evitar disgustos, como dices el Scite posee una Herramienta para ello..

Saludos..
PD: Lo de ubicar el archivo de desinstalacion lo respondí en el otro hilo...
Avatar de Usuario
chekok
Hacker del Foro
Mensajes: 111
Registrado: 16 Sep 2011, 11:50
Ubicación: Valencia / España
Contactar:

Re: Declaracion de Array

Mensaje por chekok »

Imagino que todos conoceréis el famoso ... que decompila exes de autoit incluso con protecciones con armadillo, safengine, etc.

Cómo protegeríais vosotros el ejecutable además de ofuscar el código?

Tengo un exe que me gustaría dejaros para ver si podeis ver el source, ahora mismo estoy trabajando en crear ejecutables de autoit que no se puedan decompilar. Adjunto una pequeña prueba.
Última edición por chekok el 20 May 2014, 09:11, editado 1 vez en total.
La vida es larga y dura.
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Declaracion de Array

Mensaje por PDF »

chekok escribió:Imagino que todos conoceréis el famoso ... que decompila exes de autoit incluso con protecciones con armadillo, safengine, etc.

Cómo protegeríais vosotros el ejecutable además de ofuscar el código?

Tengo un exe que me gustaría dejaros para ver si podeis ver el source, ahora mismo estoy trabajando en crear ejecutables de autoit que no se puedan decompilar. Adjunto una pequeña prueba.
Creo que deberías mirar este enlace y compartir con nosotros tu ejemplo aquí http://www.emesn.com/autoitforum/viewto ... 369&p=9539
Responder