Что нового

Как создать правильно автозагрузку чтобы проверка в реестре не грузила систему.

agikon

Знающий
Сообщения
789
Репутация
17
Нашел н афоруме обсуждение темы пор автозагрузку http://autoit-script.ru/index.php/topic,3596.0.html

Но толи я не понял, толи действительно эта тема не подымалась.
А дело в том что если я создам проверку состояния чекбокса где галочка стоит через AdlibRegister, например через 10миллисекунд. ну поставлю я галочку но оно ж всёравно буде сканировать реестр каждные 10мс.

Код:
$init3 = TimerInit()
AdlibRegister('_start', 10)


то через 10мс система будет лезть в реест и смотреть есть там запись или нет, то есть это вообще загрузит систему так что...

Вобщем я прав или не прав?
то есть как написать код так чтобы вот здесь в функции _start() к реестру было обращение только тогда когда иззменяется состояние кешбокса?
Код:
Func _start()
	If BitAND(GUICtrlRead($CheckBox1), $GUI_CHECKED) then
    RegWrite("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"'&@ScriptFullPath&'"')
EndFunc
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
agikon [?]
дело в том что если я создам проверку состояния чекбокса где галочка стоит через AdlibRegister, например через 10миллисекунд
А не надо так делать.
Код:
;...
Switch GUIGetMsg()
    Case $CheckBox1
        _start()
;...
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
ну так а если я галочку уберу то тогда же запись с реестра не удалится.
смотрите, если я галочку ставлю то система реагирует, а если удалю галочку то система на это никак неотреагирует.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
не выходит и всё тут. не пойму как порверку сделать чтобы скрипт обращался в реестр ТОЛЬКО если произошли изменеия в чекбоксе.

Код:
#include <GuiConstantsEx.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>

GUICreate("PC")  ; will create a dialog box that when displayed is centered
$nCombo = GUICtrlCreateCombo("", 10,10) ; create first item
GUICtrlSetData(-1, "Выключить ПК|Перезагрузить ПК") ; add other item and set a new default

$start = GUICtrlCreateCheckbox("создаит запись в реестре на автозапуск", 35, 100, 250, 20)
GUICtrlSetState(-1, $start)

GUISetState()

; Run the GUI until the dialog is closed
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
       ; Case $start
             ; RegRead("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)

        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $nCombo
            Switch GUICtrlRead($nCombo)
                Case "Выключить ПК"
                    			MsgBox(64, 'Info', 'выключен ')
					;Shutdown(1)
                Case "Перезагрузить ПК"
                    			MsgBox(64, 'Info', 'перезагружен')
					;Shutdown(2)
            EndSwitch
    EndSwitch
Wend
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Я тебя не очень понял, ты про это:
Код:
Func _start()
    If BitAND(GUICtrlRead($CheckBox1), $GUI_CHECKED) then ;Если стоит галочка, то записывает
		RegWrite("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"'&@ScriptFullPath&'"')
	Else ;Если не стоит галочка, то удаляет
		RegDelete("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
	EndIf
EndFunc
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
о Zaramot
смотри задача как бы самая простая.
просто надо сделать так чтобы когда:
- если поставил галочку в кешбокс то соответственно в реестре записалось.
-если галочку убрал то соответственно запись в реестре удалилась.
-всё.

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

то есть смотри, скрипт в реестр должен обращатся только в том случае когда мы только что сняли или только что поставили галочку.
И всё, а в остальное время в реестр не обращался скрипт.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
А так ?:
Код:
#include <GuiConstantsEx.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>

GUICreate("PC")  ; will create a dialog box that when displayed is centered
$nCombo = GUICtrlCreateCombo("", 10,10) ; create first item
GUICtrlSetData(-1, "Выключить ПК|Перезагрузить ПК") ; add other item and set a new default

$start = GUICtrlCreateCheckbox("создаит запись в реестре на автозапуск", 35, 100, 250, 20)
GUICtrlSetState(-1, $start)

GUISetState()

; Run the GUI until the dialog is closed
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
		Case $start
			If BitAND(GUICtrlRead($CheckBox1), $GUI_CHECKED) then ;Если стоит галочка, то записывает
				RegWrite("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"'&@ScriptFullPath&'"')
			Else ;Если не стоит галочка, то удаляет
				RegDelete("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
			EndIf
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $nCombo
            Switch GUICtrlRead($nCombo)
                Case "Выключить ПК"
                                MsgBox(64, 'Info', 'выключен ')
                    ;Shutdown(1)
                Case "Перезагрузить ПК"
                                MsgBox(64, 'Info', 'перезагружен')
                    ;Shutdown(2)
            EndSwitch
    EndSwitch
Wend
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
так и знал что ас мне разжуёт. заработало!
Zaramot
вот только я не могу отследить обращение к реестру.я использую прогу regmon.
то есть как скажешь обращение к реестру идёт только в момент когда ставим/удаляем галку, или обращение к реестру идёт каждый раз когда цикл прокручивается?
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
обращение к реестру идёт только в момент когда ставим/удаляем галку
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
Спасибо Zaramot!
Спасибо всем. Разобрался всё работает.
 
Верх