Что нового

Расстановка CHECKBOX'ов в зависимости от значений в реестре

AlexNewman

Новичок
Сообщения
15
Репутация
0
Прошу прощения, хочу вынести вопрос в отдельный топик, поиск не решил мой вопрос.

Помогите реализовать расстановку CHECKBOX'ов в зависимости от значений в реестре.

То есть есть ряд галок, по кнопке "проверить" скрипт смотрит в реестр, в нужный раздел, в конкретный параметр (за каждой галкой разные), и в зависимости от значений, расставляет галки, тем самым указывая что эта "настройка" включена, и снимает галку, если нужного ключа не находит.

Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <TabConstants.au3>
#include <array.au3>

;описание переменных
;===================================================================================================
Local $tab0, $tab1, $tab2, $tab3, $tab4, $tab5 														;Переменные - вкладки
Local $tab0input, $tab1input

;===================================================================================================
GUICreate("GRDN-LOCK", 740, 480)	;заголовок окна
GUISetState ()

;===================================================================================================
;создание поля с вкладками
$tab0 = GUICtrlCreateTab(10, 10, 520, 400, $TCS_TABS + $TCS_RIGHTJUSTIFY + $TCS_MULTILINE, $WS_EX_CLIENTEDGE) ;, $WS_VSCROLL)	;создание поля с вкладками

;ВКЛАДКА 5 (DEMO)          ==========================================================================================================================
$tab5 = GUICtrlCreateTabItem("Демонстрация")
Dim $CheckBox[3]
$CheckBox[0] = GUICtrlCreateCheckbox('Добавить пункт меню "!_пункт1"', 20, 50, 400, 20)
$CheckBox[1] = GUICtrlCreateCheckbox('Добавить пункт меню "!!__пункт2"', 20, 70, 400, 20)
$CheckBox[2] = GUICtrlCreateCheckbox('Добавить пункт меню "!!!___пункт3"', 20, 90, 400, 20)

GUICtrlCreateTabItem("") ; определяет конец вкладок

;Кнопка ПРИМЕНИТЬ ====================================================================================
Local $CTRL_btn3 = GUICtrlCreateButton("Применить", 570, 100, 80, 29)
Local $CTRL_btn4 = GUICtrlCreateButton("Проверить", 570, 150, 80, 29)

GUISetState() ;Показывает сосзданное окно

;=============================================================================================================================================================================
;тестовые ключи реестра (добавляют пункты контекстного меню рабочего стола)
Dim $CheckBoxItem[3]
$CheckBoxItem[0] = 'HKEY_CURRENT_USER\Software\Test,TestKey1,REG_DWORD,1' ;
$CheckBoxItem[1] = 'HKEY_CLASSES_ROOT\DesktopBackground\Shell\!!__Пункт2,TestKey2,REG_DWORD,1' ;'HKEY_CURRENT_USER\Software\Test,TestKey2,REG_SZ,Значение2'
$CheckBoxItem[2] = 'HKEY_CLASSES_ROOT\DesktopBackground\Shell\!!!__Пункт3,TestKey3,REG_DWORD,1' ;'HKEY_CURRENT_USER\Software\Test,TestKey3,REG_SZ,Значение3'

Global $aPath, $key

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

		 Case $CTRL_btn4
			For $i = 0 To Ubound($CheckboxItem) - 1
			   $part = StringSplit($CheckBoxItem[$i], ',')
			   $sPath = RegRead($part[1],$part[2])
			   $sString =  $sPath
;~ 			   For $i = 0 To Ubound($CheckBox) - 1
 			   If $sString = 1 Then GUICtrlSetState ($CheckBox, $GUI_CHECKED)
				 ConsoleWrite($sString)
				 MsgBox(64, "Port", " Значение: " & $sString)

;				 If $sString = 0 Then GUICtrlSetState ($CheckBox[i], $GUI_UNCHECKED)			;!!!!!!
					 ConsoleWrite('!_ВЫКЛ_!')														;!!!!!!
   ;MsgBox(64, "Port", " !!!Значение: " & $sString)

Next

		 Case $CTRL_btn3
            ConsoleWrite('---------------------------------' & @CR)
            For $i = 0 To UBound($CheckBox) - 1
                If GUICtrlRead($CheckBox[$i]) = $GUI_CHECKED Then
					$part = StringSplit($CheckBoxItem[$i], ',')
                    RegWrite($part[1], $part[2], $part[3], $part[4])
					ConsoleWrite ('чекбокс ВКЛ_')
                    If Not @error Then
                        ConsoleWrite(GUICtrlRead($CheckBox[$i]) & '  установлено' & @CR)
                    Else
                        ConsoleWrite('Ошибка записи ' & @error & ' в ' & GUICtrlRead($CheckBox[$i]) & @CR)
                    EndIf

                Else
                    $part = StringSplit($CheckBoxItem[$i], ',')
					RegDelete($part[1], $part[2])    										;ФУНКЦИЯ РАБОТАЕТ, УДАЛЯЕТ ТОЛЬКО КЛЮЧИ РЕЕСТРА, НО НЕ РАЗДЕЛЫ
					If Not @error Then
						ConsoleWrite ('Значение удалено_')
					EndIf
                EndIf

            Next
    EndSwitch

WEnd


Спасибо за внимание, и безмерная благодарность за помощь )
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
Код:
Case $CTRL_btn4
            For $i = 0 To Ubound($CheckboxItem) - 1
               $part = StringSplit($CheckBoxItem[$i], ',')
               If RegRead($part[1], $part[2]) Then
                  GUICtrlSetState($CheckBox[$i], $GUI_UNCHECKED)
               Else
                  GUICtrlSetState($CheckBox[$i], $GUI_CHECKED)
               EndIf
            Next
 
Автор
A

AlexNewman

Новичок
Сообщения
15
Репутация
0
Спасибо! ) работает, только CHECKED/UNCHEKED наоборот местами
 
Верх