Что нового

[Реестр] RegWrite из Input И CheckBox

oneDmitry

Новичок
Сообщения
55
Репутация
3
как сделать запись в реестр из Input и ChekBox ?
можно ли прочитав реестр вывести данные на Input ?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Код:
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("Regedit", 200, 250) ;Создаем формк
;Читаем из реестра
$sRead = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") ;Читаем
$Input1 = GUICtrlCreateInput($sRead,10,10,180,20) ;Создаем инпут

;Записываем в реестр
GuictrlCreateLabel("Записать в реестр:",10,70)
$Input2 = GUICtrlCreateInput("Какое то значение",10,100,180,20) ;Создаем еще один инпут но для записи
$CheckBox1 = GUICtrlCreateCheckbox("Чекбокс",10,140);Создаем чекбокс
$Button1 = GuiCtrlCreatebutton("Записать", 10, 170,180,20);Создаем кнопку для обработки событий
GUISetState()

While 1 ;Создаем цикл для обработки событий формы
	$nMsg = GUIGetMsg() 
	Switch $nMsg
		Case $GUI_EVENT_CLOSE ;Если нажали ктестик то...
			Exit ;... выход
		Case $Button1 ;Если нажали на кнопку то ...
			RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Test", "TestKey", "REG_SZ", GuiCtrlRead($Input2)) ;... Записываем значение из инпута
			RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Test", "TestKey2", "REG_SZ", Number(GUICtrlRead($CheckBox1) = $GUI_CHECKED));... и записываем стейт чекбокса в виде 0 или 1
	EndSwitch
WEnd ;Конец цикла


Можно вот так :smile:
 
Автор
O

oneDmitry

Новичок
Сообщения
55
Репутация
3
Medic84 сказал(а):
Код:
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("Regedit", 200, 250) ;Создаем формк
;Читаем из реестра
$sRead = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") ;Читаем
$Input1 = GUICtrlCreateInput($sRead,10,10,180,20) ;Создаем инпут

;Записываем в реестр
GuictrlCreateLabel("Записать в реестр:",10,70)
$Input2 = GUICtrlCreateInput("Какое то значение",10,100,180,20) ;Создаем еще один инпут но для записи
$CheckBox1 = GUICtrlCreateCheckbox("Чекбокс",10,140);Создаем чекбокс
$Button1 = GuiCtrlCreatebutton("Записать", 10, 170,180,20);Создаем кнопку для обработки событий
GUISetState()

While 1 ;Создаем цикл для обработки событий формы
	$nMsg = GUIGetMsg() 
	Switch $nMsg
		Case $GUI_EVENT_CLOSE ;Если нажали ктестик то...
			Exit ;... выход
		Case $Button1 ;Если нажали на кнопку то ...
			RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Test", "TestKey", "REG_SZ", GuiCtrlRead($Input2)) ;... Записываем значение из инпута
			RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Test", "TestKey2", "REG_SZ", Number(GUICtrlRead($CheckBox1) = $GUI_CHECKED));... и записываем стейт чекбокса в виде 0 или 1
	EndSwitch
WEnd ;Конец цикла


Можно вот так :smile:
всё работает, но не так как мне надо, у меня 4 ChekBox'a, Input и 2 Radio и надо что бы всё это в реестр записывалось при нажатии Button, и притом что ChekBox записывает определенное значение, у всех 4-х они разные, а скрипт выполняется на 1\3, то есть я выставляю Radio u Input, он записывает только Input, т.к он стоит раньше чем Input
Код:
while 1

$s00 = 0x00000000
$s01 = 0x00000001
$s02 = 0x00000002
$s03 = 0x00000003
$nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
        Exit
Case $ButtonReg 
Select 
	Case GUICtrlRead($swritename); = $GUI_CHECKED
		RegWrite("HKEY_CURRENT_USER\...", "...", "REG_SZ", GUICtrlRead($swritename))
    ;Exitloop
    Case GUICtrlRead($Radio0) = $GUI_CHECKED 
		RegWrite("HKEY_CURRENT_USER\...", "...", "REG_DWORD", $s00)
    ;Exitloop
    Case GUICtrlRead($Radio1) = $GUI_CHECKED 
		RegWrite("HKEY_CURRENT_USER\...", "...", "REG_DWORD", $s01)
    ;Exitloop
	Case GUICtrlRead($Radio2) = $GUI_CHECKED 
		RegWrite("HKEY_CURRENT_USER\...", "...", "REG_DWORD", $s02)
    ;Exitloop
	Case GUICtrlRead($Radio3) = $GUI_CHECKED 
		RegWrite("HKEY_CURRENT_USER\...", "...", "REG_DWORD", $s03)
   ;Exitloop
	
	Case GUICtrlRead($music) = $GUI_CHECKED 
		RegWrite("HKEY_CURRENT_USER\...", "...", "REG_DWORD", "0 или 1")
    ;Exitloop
	Case GUICtrlRead($sound) = $GUI_CHECKED 
		RegWrite("HKEY_CURRENT_USER\...", "...", "REG_DWORD", "0 или 1")
    Exitloop
EndSelect 
EndSwitch
WEnd
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Я делаю так:

Код:
#Include <GUIConstantsEx.au3>

Global Const $REG_KEY_NAME = 'HKCU\SOFTWARE\MyProgram'

$cParam1 = 1 ; Checkbox1
$cParam2 = 0 ; Checkbox2
$cParam3 = 0 ; Checkbox3
$cParam4 = 1 ; Checkbox4
$cParam5 = 0 ; 0 - Radio1; 1 - Radio2; 2 - Radio3; etc
$cParam6 = 'Simple Text' ; Input

_ReadRegistry()

GUICreate('MyGUI', 400, 400)
$Checkbox1 = GUICtrlCreateCheckbox('Checkbox 1', 10, 10, 100, 20)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * $cParam1, $GUI_UNCHECKED * (Not $cParam1)))
$Checkbox2 = GUICtrlCreateCheckbox('Checkbox 2', 10, 32, 100, 20)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * $cParam2, $GUI_UNCHECKED * (Not $cParam2)))
$Checkbox3 = GUICtrlCreateCheckbox('Checkbox 3', 10, 54, 100, 20)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * $cParam3, $GUI_UNCHECKED * (Not $cParam3)))
$Checkbox4 = GUICtrlCreateCheckbox('Checkbox 4', 10, 76, 100, 20)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * $cParam4, $GUI_UNCHECKED * (Not $cParam4)))
GUIStartGroup()
$Radio1 = GUICtrlCreateRadio('Radio 1', 150, 10, 100, 20)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * ($cParam5 = 0), $GUI_UNCHECKED * ($cParam5 <> 0)))
$Radio2 = GUICtrlCreateRadio('Radio 2', 150, 32, 100, 20)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * ($cParam5 = 1), $GUI_UNCHECKED * ($cParam5 <> 1)))
$Radio3 = GUICtrlCreateRadio('Radio 3', 150, 54, 100, 20)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * ($cParam5 = 2), $GUI_UNCHECKED * ($cParam5 <> 2)))
$ButtonSave = GUICtrlCreateButton('Save && Exit', 155, 368, 90, 23)
GUiSetState()
$Input = GUICtrlCreateInput($cParam6, 10, 110, 240, 20)

While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $ButtonSave
			$cParam1 = (GUICtrlRead($Checkbox1) = $GUI_CHECKED)
			$cParam2 = (GUICtrlRead($Checkbox2) = $GUI_CHECKED)
			$cParam3 = (GUICtrlRead($Checkbox3) = $GUI_CHECKED)
			$cParam4 = (GUICtrlRead($Checkbox4) = $GUI_CHECKED)
			$cParam5 = BitOR((GUICtrlRead($Radio2) = $GUI_CHECKED) * 1, (GUICtrlRead($Radio3) = $GUI_CHECKED) * 2)
			$cParam6 = GUICtrlRead($Input)
			_WriteRegistry()
			ExitLoop
	EndSwitch
WEnd

Func _ReadRegistry()
	$cParam1 = _ValueCheck(_RegRead($REG_KEY_NAME, 'Param1', 'REG_DWORD', $cParam1), 0, 1)
	$cParam2 = _ValueCheck(_RegRead($REG_KEY_NAME, 'Param2', 'REG_DWORD', $cParam2), 0, 1)
	$cParam3 = _ValueCheck(_RegRead($REG_KEY_NAME, 'Param3', 'REG_DWORD', $cParam3), 0, 1)
	$cParam4 = _ValueCheck(_RegRead($REG_KEY_NAME, 'Param4', 'REG_DWORD', $cParam4), 0, 1)
	$cParam5 = _ValueCheck(_RegRead($REG_KEY_NAME, 'Param5', 'REG_DWORD', $cParam5), 0, 2)
	$cParam6 = 	_RegRead($REG_KEY_NAME, 'Param6', 'REG_SZ', $cParam6)
EndFunc   ;==>_ReadRegistry

Func _RegRead($Key, $Value, $Type, $Default)

	Local $Val = RegRead($Key, $Value)

	If @error Then
		RegWrite($Key, $Value, $Type, $Default)
		Return $Default
	EndIf

	Switch StringUpper($Type)
		Case 'REG_SZ', 'REG_MULTI_SZ', 'REG_EXPAND_SZ'
			If Not IsString($Val) Then
				Return SetError(1, 0, $Default)
			EndIf
		Case 'REG_BINARY'
			If Not IsBinary($Val) Then
				Return SetError(1, 0, $Default)
			EndIf
		Case 'REG_DWORD'
			If Not IsInt($Val) Then
				Return SetError(1, 0, $Default)
			EndIf
		Case Else
			Return SetError(1, 0, $Default)
	EndSwitch
	Return $Val
EndFunc   ;==>_RegRead

Func _ValueCheck($iValue, $iMin, $iMax)
	If $iValue < $iMin Then
		Return $iMin
	EndIf
	If $iValue > $iMax Then
		Return $iMax
	EndIf
	Return $iValue
EndFunc   ;==>_ValueCheck

Func _WriteRegistry()
	RegWrite($REG_KEY_NAME, 'Param1', 'REG_DWORD', $cParam1)
	RegWrite($REG_KEY_NAME, 'Param2', 'REG_DWORD', $cParam2)
	RegWrite($REG_KEY_NAME, 'Param3', 'REG_DWORD', $cParam3)
	RegWrite($REG_KEY_NAME, 'Param4', 'REG_DWORD', $cParam4)
	RegWrite($REG_KEY_NAME, 'Param5', 'REG_DWORD', $cParam5)
	RegWrite($REG_KEY_NAME, 'Param6', 'REG_SZ', $cParam6)
EndFunc   ;==>_WriteRegistry
 
Автор
O

oneDmitry

Новичок
Сообщения
55
Репутация
3
ну я по другому решил вопрос, а как сделать что бы чек ChekBox u Radio загружались с реестра ?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
oneDmitry сказал(а):
...а как сделать что бы чек ChekBox u Radio загружались с реестра ?

Смотри мой пример.


Добавлено:
Сообщение автоматически объединено:

oneDmitry сказал(а):
ну я по другому решил вопрос...

Вообще то, у нас на форуме принято делиться найденными решениями, особенно, если ты являешься автором темы.
 
Автор
O

oneDmitry

Новичок
Сообщения
55
Репутация
3
Код:
While 1 ;Создаем цикл для обработки событий формы
$nMsg = GUIGetMsg() 
    Switch $nMsg
        Case $GUI_EVENT_CLOSE ;Если нажали ктестик то...
            Exit ;... выход
			Case $BName ;Если нажали на кнопку то ...
            RegWrite("HKEY_CURRENT_USER\", "...", "REG_SZ", GuiCtrlRead($sWriteN)) ;... Записываем значение из инпута
            RegWrite("HKEY_CURRENT_USER\...", "...", "REG_DWORD", Number(GUICtrlRead($M) = $GUI_CHECKED));... и записываем стейт чекбокса в виде 0 или 1
			RegWrite("HKEY_CURRENT_USER\", "...", "REG_DWORD", Number(GUICtrlRead($S) = $GUI_CHECKED));... и записываем стейт чекбокса в виде 0 или 1
			RegWrite("HKEY_CURRENT_USER\", "...", "REG_DWORD", Number(GUICtrlRead($W) = $GUI_CHECKED));... и записываем стейт чекбокса в виде 0 или 1
		EndSwitch
WEnd


вот так я сделал, щас буду переделывать, извиняюсь что сразу не выложил, дела атаковали

а в место radio я использовал Combo, и получилось даже еще лучше чем с Radio

Код:
...
$iReadR = RegRead("HKEY_CURRENT_USER\Software\", "name")
If $iReadR = 0 Then ; -- если значение параметра в реестре равно 0 то устанавливаем в Combo 1...
	$sX = "1"
	;MsgBox(0,"Тест", $sX)
Else
	If	$iReadR = 1 Then
		$sX = "2"
		;MsgBox(0,"Тест", $sX)
	Else
		If	$iReadR = 2 Then
			$sX = "3"
			;MsgBox(0,"Тест", $sX)
		Else
			If $iReadR = 3 Then
				$sX = "4"
				;MsgBox(0,"Тест", $sX)
			EndIf
		EndIf
	EndIf
EndIf
$Combo3 = GUICtrlCreateCombo("", 16, 232, 109, 25)
GUICtrlSetData($Combo3, "7|8|9|10",$sX)
...
While 1
$msg = GUIGetMsg()
	If GUICtrlRead($Combo3) = "1" then 
		RegWrite("HKEY_CURRENT_USER\Software\", "name", "REG_DWORD","значХ")
		Else
		If GUICtrlRead($Combo3) = "2" then 
			RegWrite("HKEY_CURRENT_USER\Software\", "name", "REG_DWORD","значХ")
			Else
			If GUICtrlRead($Combo3) = "3" then
				RegWrite("HKEY_CURRENT_USER\Software\", "name", "REG_DWORD","значХ")
				Else
				If GUICtrlRead($Combo3) = "4" then
					RegWrite("HKEY_CURRENT_USER\Software\", "name", "REG_DWORD","значХ")
				EndIf
			EndIf
		EndIf	
	EndIf
		Switch $msg
			Case $GUI_EVENT_CLOSE
				Exit
				ExitLoop
		EndSwitch
WEnd
 
Верх