Добавляет файл в автозагрузку
Довольно часто необходимо добавить свою програму в автозагрузку. Это можно сделать используя ярлык или запись в реестр. Последнее имеет дополнительные возможности, например выполнить один раз автозагрузку, после чего запись автозагрузки удаляется (RunOnce) и автозагрузка с очередью и ожиданием завершения выполнения каждого элемента автозагрузки (RunOnceEx)
На замену ниже указанного скрипта сделана функция _StartUp, которая поддерживает все вышеуказанные свойства и сделана в виде локаничной функции.
; при установленных параметрах текущий скрипт ничего не добавляет в реестр.
; авторегистрация и удаление регистрации используя ключи в ком-строке /a, /d
If $CmdLine[0] > 0 Then
Switch $CmdLine[1]
Case '/a'
RegRead("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
If @error Then
RegWrite("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"' & @ScriptFullPath & '"')
MsgBox(0, 'Сообщение', 'регистрация в автозагрузке выполнена')
Else
If MsgBox(4, 'Сообщение', 'Ключ уже существует' & @CRLF & 'Перезаписать принудительно?') = 6 Then
RegWrite("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"' & @ScriptFullPath & '"')
MsgBox(0, 'Сообщение', 'регистрация в автозагрузке выполнена')
EndIf
EndIf
Case '/d'
RegRead("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
If @error Then
MsgBox(0, 'Сообщение', 'Ключ отсутствует' & @CRLF & 'удаление не требуется')
Else
RegDelete("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
MsgBox(0, 'Сообщение', 'Удаление ключа выполнено')
EndIf
Case Else; Or '/?' Or '/h' Or '/help'
MsgBox(0, 'Сообщение', 'Поддерживаются ключи:' & @CRLF & _
'/a - регистрация скрипта в автозагрузке' & @CRLF & '/d - удаление регистрации в автозагрузке')
EndSwitch
EndIf
; авторегистрация
$auto = 0
If $auto = 1 Then
RegRead("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
If @error Then RegWrite("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"' & @ScriptFullPath & '"')
EndIf
; автостарт путём создания ярлыка в атозагрузке
$Autostart = 0
If $Autostart = 1 Then
$filename = StringRegExpReplace(@ScriptName, '(^.*)\.(.*)$', '\1')
If Not FileExists(@StartupDir & '\' & $filename & '.lnk') Then FileCreateShortcut(@ScriptFullPath, @StartupDir & '\' & $filename & '.lnk')
EndIf
; удаление автостарта путём удаления ярлыка в атозагрузке
$DelAutostart = 0
If $DelAutostart = 1 Then
$filename = StringRegExpReplace(@ScriptName, '(^.*)\.(.*)$', '\1')
If FileExists(@StartupDir & '\' & $filename & '.lnk') Then FileDelete(@StartupDir & '\' & $filename & '.lnk')
EndIf
; пример с функцией, здесь жёсткое условие, либа автозагрузка, либо неавтозагрузка
Func _Autostart()
$filename = StringRegExpReplace(@ScriptName, '(^.*)\.(.*)$', '\1')
If $Autostart = 1 Then
If Not FileExists(@StartupDir & '\' & $filename & '.lnk') Then FileCreateShortcut(@ScriptFullPath, @StartupDir & '\' & $filename & '.lnk')
Else
If FileExists(@StartupDir & '\' & $filename & '.lnk') Then FileDelete(@StartupDir & '\' & $filename & '.lnk')
EndIf
EndFunc ;==>_Autostart |