Что нового

[Реестр] Автозагрузка и Автозапуск скрипта при старте Windows

Guezt

Продвинутый
Сообщения
335
Репутация
81
AutoIt: 3.3.6.1
Версия: 1.2

Категория: Администратирование, Автоматизация, Вспомогательные функции, Система / Реестр

Описание: легко и быстро добавляет или удаляет ваш скрипт с автозагрузки Windows

Код/Пример:
Код:
#include <AutoRun.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

GUICreate("Example", 250, 125, -1, -1, -1, BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
$Checkbox = GUICtrlCreateCheckbox("Запускать вместе с Windows", 20, 25, 175, 17)
GUICtrlCreateLabel("Инфо:", 20, 65, 35, 17)
$Label = GUICtrlCreateLabel("", 55, 65, 200, 17)
RegRead("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
If Not @error Then
GUICtrlSetState($Checkbox, $GUI_CHECKED)
GUICtrlSetData($Label, 'Добавлен в Автозагрузку')
Else
GUICtrlSetData($Label, 'Нет в Автозагрузке')
EndIf
GUISetState(@SW_SHOW)


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Checkbox
            If GUICtrlRead($Checkbox) = $GUI_CHECKED Then
                If _AutoRunAdd(0,'',"/key /key2 /key3") = 0 And RegRead("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName) <> '' Then
                    GUICtrlSetData($Label, 'Добавлен в Автозагрузку')
                Else
                    GUICtrlSetData($Label, 'Ошибка добавления в Автозагрузку')
                EndIf
            Else
                If _AutoRunDel() = 0 And RegRead("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName) = "" Then
                    GUICtrlSetData($Label, 'Удалено из Автозагрузки')
                EndIf
            EndIf

    EndSwitch
WEnd
UDF: AutoRun.au3
История версий: 1.0-1.2
1.2
- Deleted All SetError()
+ check Administrator

1.1
* _AutoRunAdd - Fix Sintax Error (thanks madmasles)
+ _AutoRunAdd - Add parameters Keys

Автор(ы): Guezt Gutsy
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 318
Guezt Gutsy
Обычно я скрипты в автозагрузку добавляю с ключами, а у Вас такой возможности нет. :(
Еще меня смущает эта строка:
Код:
;...
RegRead($iMethod & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", String($sName)) = "" <> @ScriptFullPath Then
;...
 
Автор
G

Guezt

Продвинутый
Сообщения
335
Репутация
81
madmasles
Код:
= "" <>
- вот же я написал ))) спасибо!

$iMethod по умолчанию равно 0 и добаляет для текущего пользователя(HKCU), если задать 1 то для всех пользователей(HCLM) (если ключ отличается от 1 то для текущего пользователя)


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


достаточно добавить строчку в скрипте:
Код:
;...
_AutoRunAdd() ; добавить ваш скрипт в автозапуск Windows для текущего пользователя
; а 
_AutoRunDel() ; удалит с Автозагрузки для текущего пользователя.
;...

или с параметрами:
Код:
;...
$sName = "MyProg"
$sKey = "/key /key1 /key2"
_AutoRunAdd(1,$sName,$sKey) ; добавить ваш скрипт в автозапуск Windows для Всех пользователей
; такой ключ удаляется так:
_AutoRunDel(1,$sName) ; убрать с автозапуска Windows для Всех пользователей
;...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
+1 за вклад.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 318
Guezt Gutsy
Я точно не помню, и ради проверки не хочется создавать бесправного пользователя, но, вроде, в HKLM могут писать только админы. Может, есть смысл добавить проверку, типа
Код:
;...
If Number($iMethod) <> 1 Then
	$iMethod = "HKCU"
Else
	If Not IsAdmin() Then Return SetError(1)
	$iMethod = "HKLM"
EndIf
;...

И еще. _AutoRunAdd() всегда возвращает 0, т.к. в ней не предусмотрено возвращения.
 
Автор
G

Guezt

Продвинутый
Сообщения
335
Репутация
81
Yashied
:beer:
madmasles
Спасибо! в который раз ;D да действительно не возвращало, решил убрать Все SetError() заменив их просто на возврат чисел. обновил в шапке UDF ;)
 

forfrends

Чайник
Сообщения
176
Репутация
3
Можете мне помочь?

Вот часть кода:
Код:
#include <AutoRun.au3>

$sName = @AppDataCommonDir & "\script.exe"
$sKey = "/key /key1 /key2"
_AutoRunAdd(1,$sName,$sKey)


У меня почему-то не добавляется в автозапуск если зашел в компьютер как гость или пользователь. В чем может быть причина?

Пробовал просто:
Код:
RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', "script.exe", "REG_SZ", @AppDataCommonDir)

но тоже не помогает
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
forfrends можно запустить скрипт, предварительно запустив саму среду из под пользователя у которого есть права добавлять записи в реестр. например, если это Scite то если кликнуть на его иконку ПКМ, то там есть запуск от имени администратора, или в таком духе.
либо можно запустить regedit через RunAs
 

forfrends

Чайник
Сообщения
176
Репутация
3
Kaster сказал(а):
либо можно запустить regedit через RunAs
Можно пример?
Есть один минус: если запускать от имени администратора, то нужно вводить пароль админа. Но его нет. Поэтому это может не помочь. Если конечно там можно сделать запись без ввода пароля
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
forfrends
нет пароля, нет прав. но даже если и был бы, я не понимаю, о каком примере ты говоришь. какой пример я могу привести по нажиманию правой кнопки мыши на иконке редактора?
 
Верх