Página 1 de 1

ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 18 May 2011, 22:54
por adrianodj
Hola pues os comento tengo el siguente codigo:

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 178, 107, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Ejecutar Programa1", 8, 8, 105, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Ejecutar Programa2", 8, 32, 105, 17)
$Button1 = GUICtrlCreateButton("Aceptar", 8, 72, 73, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Cancelar", 88, 72, 73, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		case $Button2
			Exit
		case $Button1
			RunWait("$var1","$var2")
	EndSwitch
WEnd
$var1 = $Checkbox1
Necesito saber como puedo arancar 2 programas cuando seleciono una o las 2 checkbox
pero quiero que los programas arranque solamente despues de darle al botton Aceptar
gracias

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 18 May 2011, 23:08
por ms999
No entiendo lo de $var1 y $var2... pero lo que tenes que hacer es usar la funcion run...
antes del run tendrias que checkear que checkbox esta tildada y cual no para esto fijate la funcion GuiCtrlGetState()
seria algo como...

Código: Seleccionar todo

If GuiCtrlGetState($Checkbox1) = $GUI_CHECKED then
run(blablabla  el progrma que queres que corra... fijate en la ayuda como ponerlo)
endif
If GuiCtrlGetState($Checkbox2) = $GUI_CHECKED then
run(blablabla  el otro programa)
endif
esto debe ir dentro del case del boton... osea...

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 178, 107, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Ejecutar Programa1", 8, 8, 105, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Ejecutar Programa2", 8, 32, 105, 17)
$Button1 = GUICtrlCreateButton("Aceptar", 8, 72, 73, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Cancelar", 88, 72, 73, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button2
			If GUICtrlGetState($Checkbox1) = $GUI_CHECKED Then
				Run(blablabla el progrma que queres que corra... fijate en la ayuda como ponerlo)
			EndIf
			If GUICtrlGetState($Checkbox2) = $GUI_CHECKED Then
				Run(blablabla el otro programa)
			EndIf
			Exit
		Case $Button1
			RunWait("$var1", "$var2"); esto no se uqe es
	EndSwitch
WEnd
$var1 = $Checkbox1 ;  y esto tampoco se que es 
describi un poco mejor para que queres tu programa porque hay un par de cosas que no entiendo que son... :S

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 18 May 2011, 23:33
por adrianodj
hola gracias por la respuesta tan rapida
pues voi avanzando el codigo que quiero es este lo que pasa que no me ejecuta los dos programas prueba1.exe y prueba2.exe que los tengo juntos con el script
es que pulso el aceptar y el programa se cierra y no hace nada

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 178, 107, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Ejecutar Programa1", 8, 8, 105, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Ejecutar Programa2", 8, 32, 105, 17)
$Button1 = GUICtrlCreateButton("Aceptar", 8, 72, 73, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Cancelar", 88, 72, 73, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $Button1
         If GUICtrlGetState($Checkbox1) = $GUI_CHECKED Then
            Run("prueba1.exe")
         EndIf
         If GUICtrlGetState($Checkbox2) = $GUI_CHECKED Then
            Run("prueba2.exe")
		EndIf
		Exit
      Case $Button2
		Exit
   EndSwitch
WEnd

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 00:47
por Chefito
Mira a ver si falla por que no le has puesto el path donde están los programas. Por ejemplo: run(@scriptdir & "\prueba1.exe").

Si aun así no te funciona, prueba con la función shellexecute.

Saludos.

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 01:49
por sahsanu
adrianodj escribió:pues voi avanzando el codigo que quiero es este lo que pasa que no me ejecuta los dos programas prueba1.exe y prueba2.exe que los tengo juntos con el script
es que pulso el aceptar y el programa se cierra y no hace nada
Para comprobar si el checkbox está marcado usa GUICtrlRead en vez de GUICtrlGetState.

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 03:28
por Cyber90

Código: Seleccionar todo

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

$Form1 = GUICreate("Form1", 178, 107, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Ejecutar Programa1", 8, 8, 105, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Ejecutar Programa2", 8, 32, 105, 17)
$Button1 = GUICtrlCreateButton("Aceptar", 8, 72, 73, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Cancelar", 88, 72, 73, 25, $WS_GROUP)
GUISetState(@SW_SHOW)


While 1
$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
             Exit
          Case $Button1
             If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
                Run("C:\Archivos de programa\Yahoo!\Messenger\YahooMessenger.exe")
             EndIf
             If GUICtrlGetState($Checkbox2) = $GUI_CHECKED Then
                Run("C:\Archivos de programa\Yahoo!\Messenger\YahooMessenger.exe")
          EndIf
          Case $Button2
          Exit
       EndSwitch
    WEnd

TOMA AMIGO AQUI LO TIENES :D :smt041

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 07:40
por adrianodj
Cyber90 escribió:

Código: Seleccionar todo

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

$Form1 = GUICreate("Form1", 178, 107, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Ejecutar Programa1", 8, 8, 105, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Ejecutar Programa2", 8, 32, 105, 17)
$Button1 = GUICtrlCreateButton("Aceptar", 8, 72, 73, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Cancelar", 88, 72, 73, 25, $WS_GROUP)
GUISetState(@SW_SHOW)


While 1
$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
             Exit
          Case $Button1
             If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
                Run("C:\Archivos de programa\Yahoo!\Messenger\YahooMessenger.exe")
             EndIf
             If GUICtrlGetState($Checkbox2) = $GUI_CHECKED Then
                Run("C:\Archivos de programa\Yahoo!\Messenger\YahooMessenger.exe")
          EndIf
          Case $Button2
          Exit
       EndSwitch
    WEnd

TOMA AMIGO AQUI LO TIENES :D :smt041

Hola pues muchas gracias eres una maquina :) fuaciona poniendo el patch entero del programa o de esta manera
por sahsanu » Hoy, 01:49
Para comprobar si el checkbox está marcado usa GUICtrlRead en vez de GUICtrlGetState.

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 178, 107, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Ejecutar Programa1", 8, 8, 105, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Ejecutar Programa2", 8, 32, 105, 17)
$Button1 = GUICtrlCreateButton("Aceptar", 8, 72, 73, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Cancelar", 88, 72, 73, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $Button1
         If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
		 ShellExecute("prueba1.exe")
         EndIf
         If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then
		 ShellExecute("prueba2.exe")
		EndIf
      Case $Button2
		Exit
   EndSwitch
WEnd
gracias a todos por contestar doy el tema por finalizado

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 08:06
por Ximorro
Hola a todos, veo que lo de la ejecución ya está solucionado, pero hay que tener cuidado con lo del estado del checkbox, porque con la misma llamada puede devolver varios estados. Así si por ejemplo tiene foco y está activado si intentas
GUICtrlRead($Checkbox1) = $GUI_CHECKED
te puede dar falso, aunque esté activado.

El truco está en extraer el estado que te interesa con operaciones de bits. Yo me hice esta función para hacerlo más cómodo:

Código: Seleccionar todo

Func _chkIsChecked($chk)
	Return BitAnd(GUICtrlRead($chk),$GUI_CHECKED) = $GUI_CHECKED
EndFunc
Así para usarlo se hace:
If _chkIsChecked($Checkbox1) Then ...

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 22:49
por ms999
hola... :) bien para el primer programa... lo primero que te voy a decir es que uses la herramienta tidy que sirve para ordenar el script y se vea mejor, otra cosa tambien que se nos hace mas comodo a la mayoria es tener las funciones al final del script... son cosas de costumbre y comodidad y que generalmente muchos las hacemos asi por lo tanto nos ayuda a entendernos mejor...

Lo que pasa que titila es porqeu dentro del bucle esta contantemente seteando el estado disabled... fijate en este ejemplo.

Código: Seleccionar todo

$Form1 = GUICreate("Form1", 361, 202, 286, 228)
$Button1 = GUICtrlCreateButton("Desinstalar", 144, 32, 81, 17)
GUISetState(@SW_SHOW)
GUICtrlSetState($Button1, $GUI_ENABLE) ; aunque por defecto ya viene habilitado es para mostrarte
while 1
	$msg = Guigetmsg()
	switch $msg
		case -3 ; o $GUI_EVENT_CLOSE
			Exit
	EndSwitch

WEnd
y mira este otro...

Código: Seleccionar todo

$Form1 = GUICreate("Form1", 361, 202, 286, 228)
$Button1 = GUICtrlCreateButton("Desinstalar", 144, 32, 81, 17)
GUISetState(@SW_SHOW)
while 1
	$msg = Guigetmsg()
	switch $msg
		case -3 ; o $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	GUICtrlSetState($Button1, $GUI_ENABLE)
WEnd
En el segundo le estas diciendo todo el tiempo que cambie su estado para evitar esto tenes muchos metodos, vos tendrias qeu elegir el que mas te combiene
uno de estos metodos seria crear algun tipo de control como una variable con true false.
esta variable habilitaria poder entrar a la parte del scrip donde checkeas los ini y seteas el estado de los controles...
una vez echo esto cambia de valor entonces el script no entrara a esa parte y no tocara el estado de los botones..
esta variable solo volvera a cambiar cuando algun cambio se haya producido, osea cuando uno de los botones de intalar o desinstalar se oprima..

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <guiconstants.au3>

#region ### START Koda GUI section ### Form=
$var = 1
$control = false
$Form1 = GUICreate("Form1", 361, 202, 286, 228)
$Checkbox1 = GUICtrlCreateCheckbox("Install 1", 40, 32, 81, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Install 2", 40, 72, 81, 17)
$Group1 = GUICtrlCreateGroup("Theme", 8, 8, 345, 137)
$Button3 = GUICtrlCreateButton("Desinstalar", 144, 32, 81, 17, $WS_GROUP)
$Button4 = GUICtrlCreateButton("Desinstalar", 144, 72, 81, 17, $WS_GROUP)
$Checkbox3 = GUICtrlCreateCheckbox("Install 3", 40, 112, 73, 17)
$Button5 = GUICtrlCreateButton("Desinstalar", 144, 112, 81, 17, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Aceptar", 64, 160, 97, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Cancelar", 200, 160, 97, 25, $WS_GROUP)
$Checkbox1estado = IniRead("estados.ini", "Checkbox1", "estado", "")
$Checkbox1estado = IniRead("estados.ini", "Checkbox2", "estado", "")
$Checkbox1estado = IniRead("estados.ini", "Checkbox3", "estado", "")
GUICtrlSetState($Button3, $GUI_DISABLE)
GUICtrlSetState($Button4, $GUI_DISABLE)
GUICtrlSetState($Button5, $GUI_DISABLE)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

Func _chkIsChecked($chk)
	Return BitAND(GUICtrlRead($chk), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_chkIsChecked
Func Checkbox1()
	GUICtrlSetState($Button3, $GUI_ENABLE)
	GUICtrlSetState($Checkbox1, $GUI_DISABLE)
EndFunc   ;==>Checkbox1
Func Checkbox2()
	GUICtrlSetState($Button4, $GUI_ENABLE)
	GUICtrlSetState($Checkbox2, $GUI_DISABLE)
EndFunc   ;==>Checkbox2
Func Checkbox3()
	GUICtrlSetState($Button5, $GUI_ENABLE)
	GUICtrlSetState($Checkbox3, $GUI_DISABLE)
EndFunc   ;==>Checkbox3

While 2
	$msg = GUIGetMsg()
	If $control = false Then
	If IniRead("estados.ini", "Checkbox1", "estado", "") Then Checkbox1()
	If IniRead("estados.ini", "Checkbox2", "estado", "") Then Checkbox2()
	If IniRead("estados.ini", "Checkbox3", "estado", "") Then Checkbox3()
	$control = true ; una vez que salga de esta condicion ya no volvera a entrar hasta que control vuelva a ser false
	endif
	Switch $msg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Button1
			If _chkIsChecked($Checkbox1) Then
				ShellExecute("prueba1.exe")
				IniWrite("estados.ini", "Checkbox1", "estado", "instalado")
				GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
			EndIf
			If _chkIsChecked($Checkbox2) Then
				ShellExecute("prueba2.exe")
				IniWrite("estados.ini", "Checkbox2", "estado", "instalado")
				GUICtrlSetState($Checkbox2, $GUI_UNCHECKED)
			EndIf
			If _chkIsChecked($Checkbox3) Then
				ShellExecute("prueba3.exe")
				IniWrite("estados.ini", "Checkbox3", "estado", "instalado")
				GUICtrlSetState($Checkbox3, $GUI_UNCHECKED)
			EndIf
			$control = false ; una vez que se actualizo algo porque se presiono uno de los botones habilite la entrada a la condicion
		Case $Button2
			Exit

		Case $Button3
			If IniRead("estados.ini", "Checkbox1", "estado", "instalado") Then
				ShellExecute("desinstalar3.exe")
				IniDelete("estados.ini", "Checkbox1", "estado")
				GUICtrlSetState($Button3, $GUI_DISABLE)
				GUICtrlSetState($Checkbox1, $GUI_ENABLE)
				GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
			EndIf
			$control = false
		Case $Button4
			If IniRead("estados.ini", "Checkbox2", "estado", "instalado") Then
				ShellExecute("desinstalar4.exe")
				IniDelete("estados.ini", "Checkbox2", "estado")
				GUICtrlSetState($Button4, $GUI_DISABLE)
				GUICtrlSetState($Checkbox2, $GUI_ENABLE)
				GUICtrlSetState($Checkbox2, $GUI_UNCHECKED)
			EndIf
			$control = false
		Case $Button5
			If IniRead("estados.ini", "Checkbox3", "estado", "instalado") Then
				ShellExecute("desinstalar5.exe")
				IniDelete("estados.ini", "Checkbox3", "estado")
				GUICtrlSetState($Button5, $GUI_DISABLE)
				GUICtrlSetState($Checkbox3, $GUI_ENABLE)
				GUICtrlSetState($Checkbox3, $GUI_UNCHECKED)
			EndIf
			$control = false
	EndSwitch
WEnd
Espero que me hays entendido y cualquier duda que te haya quedado pregunta que para eso estamos aca.! ^^

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 22:51
por ms999
soy yo o borraste el mensaje??? :smt044

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 22:52
por sahsanu
ms999 escribió:soy yo o borraste el mensaje??? :smt044
Lo he borrado porque me he equivocado de post :(. Ya lo he puesto en el otro.

Edito: Yo hablaba del que yo había puesto respondiendo porque al no ver la pregunta, estaba convencido de haberme equivocado de post. Al final resulta que lo ha borrado el que lo ha puesto :smt030

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 22:53
por ms999
bueno pero te lo conteste aqui!! :smt044

Re: ejecutar 2 programas cuando se pulsa el boton aceptar

Publicado: 19 May 2011, 23:38
por adrianodj
ms999 escribió:hola... :) bien para el primer programa... lo primero que te voy a decir es que uses la herramienta tidy que sirve para ordenar el script y se vea mejor, otra cosa tambien que se nos hace mas comodo a la mayoria es tener las funciones al final del script... son cosas de costumbre y comodidad y que generalmente muchos las hacemos asi por lo tanto nos ayuda a entendernos mejor...

Lo que pasa que titila es porqeu dentro del bucle esta contantemente seteando el estado disabled... fijate en este ejemplo.

Código: Seleccionar todo

$Form1 = GUICreate("Form1", 361, 202, 286, 228)
$Button1 = GUICtrlCreateButton("Desinstalar", 144, 32, 81, 17)
GUISetState(@SW_SHOW)
GUICtrlSetState($Button1, $GUI_ENABLE) ; aunque por defecto ya viene habilitado es para mostrarte
while 1
	$msg = Guigetmsg()
	switch $msg
		case -3 ; o $GUI_EVENT_CLOSE
			Exit
	EndSwitch

WEnd
y mira este otro...

Código: Seleccionar todo

$Form1 = GUICreate("Form1", 361, 202, 286, 228)
$Button1 = GUICtrlCreateButton("Desinstalar", 144, 32, 81, 17)
GUISetState(@SW_SHOW)
while 1
	$msg = Guigetmsg()
	switch $msg
		case -3 ; o $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	GUICtrlSetState($Button1, $GUI_ENABLE)
WEnd
En el segundo le estas diciendo todo el tiempo que cambie su estado para evitar esto tenes muchos metodos, vos tendrias qeu elegir el que mas te combiene
uno de estos metodos seria crear algun tipo de control como una variable con true false.
esta variable habilitaria poder entrar a la parte del scrip donde checkeas los ini y seteas el estado de los controles...
una vez echo esto cambia de valor entonces el script no entrara a esa parte y no tocara el estado de los botones..
esta variable solo volvera a cambiar cuando algun cambio se haya producido, osea cuando uno de los botones de intalar o desinstalar se oprima..

Código: Seleccionar todo

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <guiconstants.au3>

#region ### START Koda GUI section ### Form=
$var = 1
$control = false
$Form1 = GUICreate("Form1", 361, 202, 286, 228)
$Checkbox1 = GUICtrlCreateCheckbox("Install 1", 40, 32, 81, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Install 2", 40, 72, 81, 17)
$Group1 = GUICtrlCreateGroup("Theme", 8, 8, 345, 137)
$Button3 = GUICtrlCreateButton("Desinstalar", 144, 32, 81, 17, $WS_GROUP)
$Button4 = GUICtrlCreateButton("Desinstalar", 144, 72, 81, 17, $WS_GROUP)
$Checkbox3 = GUICtrlCreateCheckbox("Install 3", 40, 112, 73, 17)
$Button5 = GUICtrlCreateButton("Desinstalar", 144, 112, 81, 17, $WS_GROUP)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Aceptar", 64, 160, 97, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Cancelar", 200, 160, 97, 25, $WS_GROUP)
$Checkbox1estado = IniRead("estados.ini", "Checkbox1", "estado", "")
$Checkbox1estado = IniRead("estados.ini", "Checkbox2", "estado", "")
$Checkbox1estado = IniRead("estados.ini", "Checkbox3", "estado", "")
GUICtrlSetState($Button3, $GUI_DISABLE)
GUICtrlSetState($Button4, $GUI_DISABLE)
GUICtrlSetState($Button5, $GUI_DISABLE)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

Func _chkIsChecked($chk)
	Return BitAND(GUICtrlRead($chk), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_chkIsChecked
Func Checkbox1()
	GUICtrlSetState($Button3, $GUI_ENABLE)
	GUICtrlSetState($Checkbox1, $GUI_DISABLE)
EndFunc   ;==>Checkbox1
Func Checkbox2()
	GUICtrlSetState($Button4, $GUI_ENABLE)
	GUICtrlSetState($Checkbox2, $GUI_DISABLE)
EndFunc   ;==>Checkbox2
Func Checkbox3()
	GUICtrlSetState($Button5, $GUI_ENABLE)
	GUICtrlSetState($Checkbox3, $GUI_DISABLE)
EndFunc   ;==>Checkbox3

While 2
	$msg = GUIGetMsg()
	If $control = false Then
	If IniRead("estados.ini", "Checkbox1", "estado", "") Then Checkbox1()
	If IniRead("estados.ini", "Checkbox2", "estado", "") Then Checkbox2()
	If IniRead("estados.ini", "Checkbox3", "estado", "") Then Checkbox3()
	$control = true ; una vez que salga de esta condicion ya no volvera a entrar hasta que control vuelva a ser false
	endif
	Switch $msg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Button1
			If _chkIsChecked($Checkbox1) Then
				ShellExecute("prueba1.exe")
				IniWrite("estados.ini", "Checkbox1", "estado", "instalado")
				GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
			EndIf
			If _chkIsChecked($Checkbox2) Then
				ShellExecute("prueba2.exe")
				IniWrite("estados.ini", "Checkbox2", "estado", "instalado")
				GUICtrlSetState($Checkbox2, $GUI_UNCHECKED)
			EndIf
			If _chkIsChecked($Checkbox3) Then
				ShellExecute("prueba3.exe")
				IniWrite("estados.ini", "Checkbox3", "estado", "instalado")
				GUICtrlSetState($Checkbox3, $GUI_UNCHECKED)
			EndIf
			$control = false ; una vez que se actualizo algo porque se presiono uno de los botones habilite la entrada a la condicion
		Case $Button2
			Exit

		Case $Button3
			If IniRead("estados.ini", "Checkbox1", "estado", "instalado") Then
				ShellExecute("desinstalar3.exe")
				IniDelete("estados.ini", "Checkbox1", "estado")
				GUICtrlSetState($Button3, $GUI_DISABLE)
				GUICtrlSetState($Checkbox1, $GUI_ENABLE)
				GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
			EndIf
			$control = false
		Case $Button4
			If IniRead("estados.ini", "Checkbox2", "estado", "instalado") Then
				ShellExecute("desinstalar4.exe")
				IniDelete("estados.ini", "Checkbox2", "estado")
				GUICtrlSetState($Button4, $GUI_DISABLE)
				GUICtrlSetState($Checkbox2, $GUI_ENABLE)
				GUICtrlSetState($Checkbox2, $GUI_UNCHECKED)
			EndIf
			$control = false
		Case $Button5
			If IniRead("estados.ini", "Checkbox3", "estado", "instalado") Then
				ShellExecute("desinstalar5.exe")
				IniDelete("estados.ini", "Checkbox3", "estado")
				GUICtrlSetState($Button5, $GUI_DISABLE)
				GUICtrlSetState($Checkbox3, $GUI_ENABLE)
				GUICtrlSetState($Checkbox3, $GUI_UNCHECKED)
			EndIf
			$control = false
	EndSwitch
WEnd
Espero que me hays entendido y cualquier duda que te haya quedado pregunta que para eso estamos aca.! ^^
Ya lo he pillado muchas gracias y espero que algun dia yo tambien podre ayudar a otros :D
He borrado el mensaje porque pensaba que nadie va a volver a leer el post:P