Что нового

Не могу узнать о состоянии Checkbox'а

Pat4005

Новичок
Сообщения
85
Репутация
4
Все время выдает '0' При проверке с помощью GUICtrlRead. Вот код:
Код:
#RequireAdmin

; ФАЙЛЫ ДЛЯ ВКЛЮЧЕНИЯ В EXE
#include <WinAPI.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>


; ОПЦИИ
AutoItSetOption("GUICloseOnESC", 0)
AutoItSetOption("TrayAutoPause",0)
AutoItSetOption("TrayMenuMode",3)
Opt("WinWaitDelay", 100)

; ОБЪЯВЛЕНИЕ КОНСТАНТ И ПЕРЕМЕННЫХ
Global Const $winH = 300
Global Const $winW = 400



;; Создание ГРАФИЧЕСКОЙ Оболочки (основное окно)
$MAINWIN=GUICreate("WinShutdown", 400, 300, 400, 300, $WS_POPUP, $WS_EX_TOOLWINDOW)
GUISetBkColor(0x000001)
GUISetState(@SW_SHOW)

; кнопка выключения
$CMD1 = GUICtrlCreateButton("", 150, 100, 70, 50)

AdlibRegister('_SetOnTopOfDesktop', 100)

; Окно настроек
$SETTINGS=GUICreate("Настройки WinShutdown",300,300,@DesktopWidth/2.6,@DesktopHeight/2.8, $DS_SETFOREGROUND, $WS_EX_TOOLWINDOW+$WS_EX_TRANSPARENT, $MAINWIN)
GUISetState(@SW_HIDE)
$CHECKBOX=GUICtrlCreateCheckbox("Автозапуск",15,15,120,15)
$CHECKREAD=Number(GUICtrlRead($CHECKBOX) = $GUI_CHECKED)
$OK=GUICtrlCreateButton("Сохранить",115,241,65,30)

;ТРЕЙ
$TRAY4 = TrayCreateItem("Настройки")
$TRAY7 = TrayCreateItem("Выход")

;; Тело цикла
While 1
	$MSG = GUIGetMsg() ; отлов сообщений GUI
	
	Select
		Case $MSG = $TRAY7
			Exit
		Case $MSG=$OK
			GUISetState(@SW_Hide,$SETTINGS)
		Case $MSG=$CHECKBOX	
			If $CHECKREAD=1 Then
				IniWrite(@ScriptDir & "\config.ini", "checkstate", "checked", 1)
				MsgBox(0,'',$CHECKREAD)
			Else
				IniWrite(@ScriptDir & "\config.ini", "checkstate", "checked", 0)
				MsgBox(0,'',$CHECKREAD)
			EndIf
		EndSelect
	$trmsg = TrayGetMsg() ; отлов сообщений трея
	Select
	Case $trmsg = $TRAY4
		$INICHECKED=IniRead(@ScriptDir & "\config.ini", "checkstate", "checked","")
		If $INICHECKED=1 then GUICtrlSetState($CHECKBOX,$GUI_CHECKED)
		GUISetState(@SW_SHOW,$SETTINGS)
	Case $trmsg = $TRAY7
			Exit
	EndSelect
Wend

; поверх только рабочего стола
Func _SetOnTopOfDesktop()
    If WinActive("[REGEXPCLASS:^(Progman|WorkerW)$]") Then
        WinSetOnTop($MAINWIN, '', 1) ; <-- добавлено
		WinActive("[REGEXPCLASS:^(Progman|WorkerW)$]")
        WinSetOnTop($MAINWIN, '', 0) ; <-- добавлено
    EndIf
EndFunc
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Код:
Func GUICtrlIsChecked($ctrlID)
    Return BitAND(GUICtrlRead($ctrlID), $GUI_CHECKED)
EndFunc

Функция проверки состояния. Безотказная.
И почему Вы опрашиваете CheckBox на проверку состояния только 1 раз? Ну естественно он будет равен все время 0
 
Автор
P

Pat4005

Новичок
Сообщения
85
Репутация
4
Medic84, спасибо за наводку! Переместил проверку состояния в цикл опроса GUI - скрипт начал выдавать то, что должен!
 
Верх