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.! ^^