; #FUNCTION# ;=================================================================================
; Function Name ...: _StartUp
; Description ........: Add or delete a startup
; Syntax................: _StartUp ( [$flag = 0 [, $sName = '' [, $sPathRun = '' [, $sArgs = '' [, $sDesc = '' [, $sIcon = '' [, $iIconNum = 0 [, $state = 0]]]]]]]] )
; Parameters:
; $flag - Specifies the startup option. Can be a combination of the following values:
; |1 - The registry, otherwise shortcut
; |2 - For all users, otherwise for the current user
; |4 - The one-time run (RunOnce), otherwise each time (registry)
; |8 - The one-time run (RunOnceEx), otherwise each time (registry)
; |16 - Do not overwrite
; |32 - To remove (Requires flags, with which the object was created and $sName, the rest are ignored.)
; $sName - Name of the registry key or shortcut. By default, the name of the current script
; $sPathRun - Path of the file, by default the full path to the current script
; $sArgs - Command-line options, by default "" - empty string
; $sDesc - File Description (is ignored for the registry)
; $sIcon - Full Path/File name of icon to use. (is ignored for the registry)
; $iIconNum - The icon instance to use (usually 0)
; $state - The state the shortcut is launched in
; Return values ....: Success - 1
; Failure - 0. Errors are the same as in the RegWrite, RegDelete. @error = 4 when the flag "do not overwrite"
; Author(s) ..........: AZJIO
; Remarks ..........: Flags 4 and 8 can not be specified together. Options, ranging from $sDesc to $state are only used for the shortcut
; ============================================================================================
; Имя функции ...: _StartUp
; Описание ........: Добавление или удаление автозагрузки в реестре
; Синтаксис.......: _StartUp ( [$flag = 0 [, $sName = '' [, $sPathRun = '' [, $sArgs = '' [, $sDesc = '' [, $sIcon = '' [, $iIconNum = 0 [, $state = 0]]]]]]]] )
; Параметры:
; $flag - Указывает вариант автозагрузки. Может быть комбинацией следующих значений:
; |1 - Реестр, иначе ярлык
; |2 - Для всех пользователей, иначе для текущего
; |4 - Одноразовый запуск (RunOnce), иначе при каждой загрузке (только для реестра)
; |8 - Одноразовый запуск (RunOnceEx), иначе при каждой загрузке (только для реестра)
; |16 - Не перезаписывать
; |32 - Удалить (Требует флаги, с которыми был создан и параметр $sName, остальные игнорирует)
; $sName - Имя параметра реестра или ярлыка. По умолчанию "" пустая строка, что означает имя текущего скрипта
; $sPathRun - Путь к запускаемому файлу. По умолчанию "" пустая строка, что означает полный путь к текущему скрипту
; $sArgs - Параметры запуска, по умолчанию "" - пустая строка
; $sDesc - Описание, отображается во всплывающей подсказке (не учитывается для реестра)
; $sIcon - Имя или путь к файлу с иконкой (ico, dll, exe и др.). (не учитывается для реестра)
; $iIconNum - Номер иконки для использования (обычно 0)
; $state - Состояние окна при запуске
; Возвращаемое значение: Успешно - 1
; Неудачно - 0. При добавлении/удалении в реестре ошибки повторяют значения ошибок соответствующих функций. Дополнительно @error = 4, если не удалось перезаписать ярлык или параметр в реестре при использовании флага "не перезаписывать"
; Автор ..........: AZJIO
; Примечания ..: Флаг удаления ставится с той же комбинацией флагов, что и создавался, иначе не сработает. Параметры, начиная с $sDesc заканчивая $state используются только для ярлыка, но и для него в большинстве случаев они является излишними. Флаги 4 и 8 не указывается вместе. Отличие RunOnceEx в том, что команды из этого раздела выполняются последовательно в порядке сортировки имён параметров, а также каждый следующий запуск ждёт окончания предыдущего.
; ============================================================================================
Func _StartUp($flag = 0, $sName = '', $sPathRun = '', $sArgs = '', $sDesc = '', $sIcon = '', $iIconNum = 0, $state = @SW_SHOWNORMAL)
If Not $sPathRun Then $sPathRun = @ScriptFullPath
If Not $sName Then
$sName = @ScriptName
Local $iPos = StringInStr($sName, '.', 1, -1)
If $iPos Then $sName = StringLeft($sName, $iPos - 1)
EndIf
If BitAND($flag, 1) Then
Local $sKeyName
If BitAND($flag, 2) Then
$sKeyName = 'HKLM'
Else
$sKeyName = 'HKCU'
EndIf
If @OSArch = 'X64' Then $sKeyName &= '64'
$sKeyName &= '\Software\Microsoft\Windows\CurrentVersion\Run'
If BitAND($flag, 4) Then
$sKeyName &= 'Once'
ElseIf BitAND($flag, 8) Then
$sKeyName &= 'OnceEx'
EndIf
If BitAND($flag, 32) Then Return RegDelete($sKeyName, $sName)
RegRead($sKeyName, $sName)
If Not @error And BitAND($flag, 16) Then Return SetError(4, 0, 0)
If $sArgs Then $sArgs = ' ' & $sArgs
Local $iRes = RegWrite($sKeyName, $sName, "REG_SZ", '"' & $sPathRun & '"' & $sArgs)
Return SetError(@error, 0, $iRes)
Else
Local $sPathLnk
If BitAND($flag, 2) Then
$sPathLnk = @StartupCommonDir & '\' & $sName & '.lnk'
Else
$sPathLnk = @StartupDir & '\' & $sName & '.lnk'
EndIf
If BitAND($flag, 32) Then Return FileDelete($sPathLnk)
If BitAND($flag, 16) And FileExists($sPathLnk) Then Return SetError(4, 0, 0)
Return FileCreateShortcut($sPathRun, $sPathLnk, '', $sArgs, $sDesc, $sIcon, '', $iIconNum, $state)
EndIf
EndFunc ;==>_StartUp