1

Тема: AutoHotkey: менеджер автозагрузки скриптов

Нижеприведённый скрипт, будучи добавлен директивой #Include в любой другой скрипт, добавляет в системное меню этого другого скрипта в трее пункт "Autorun" (переключатель), позволяющий быстро поместить запущенный скрипт в автозагрузку (в папку "Автозагрузка" или в реестр в раздел HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run текущего пользователя), или убрать его из автозагрузки. Вариант автозагрузки определяется состоянием строки:

RegistryMode = Yes

Если она закомментирована, автозагрузка идёт через папку "Автозагрузка", а если нет - через реестр. Сам скрипт:

;
; AutoHotkey Version: 1.0.35.11
; Language:       All
; Platform:       XP
; Author:         Dmitry B. Lyudmirsky <lud@skpress.ru>
; File Name:      Autorun.ahk
;
; Script Function:
;     Put Autorun.ahk into your script's directory.
;     To provide Autorun capability
;     simply insert a line 
;     #Include Autorun.ahk ; place Autorun item here
;     anywhere in your script's tray menu declaration. 
;     If using Registry mode don't forget a line
;     #Include %A_ScriptDir% ; 1.0.35.11+
;     at the beginning of the script
;
RegistryMode = Yes ; comment out this line to set Startup Folder mode
AutorunMenuItemName = Autorun
if RegistryMode
    SK = Software\Microsoft\Windows\CurrentVersion\Run ; Registry SubKey name
else
{
    SF = %A_Startup% ; Startup Folder - you may choose A_StartupCommon
    LF = %SF%\%A_ScriptName%.lnk ; LinkFile
}
Menu Tray, Add, %AutorunMenuItemName%, AutorunSetup 
AutorunSetup:
    if AutorunInit
    {
        if AutorunOn
        {
            if RegistryMode
                RegDelete HKCU, %SK%, %A_ScriptName%
            else
                FileDelete %LF%
            AutorunOn := ErrorLevel
            if !AutorunOn
                Menu Tray, Uncheck, %AutorunMenuItemName%
        return
        } ; else
        if RegistryMode
            RegWrite REG_SZ, HKCU, %SK%, %A_ScriptName%, %A_ScriptFullPath%
        else
            FileCreateShortcut %A_ScriptFullPath%, %LF%, %A_ScriptDir%
        AutorunOn := !ErrorLevel
        if AutorunOn
            Menu Tray, Check, %AutorunMenuItemName%
    return
    }
AutorunInit = Yes
if RegistryMode
    RegRead SPath, HKCU, %SK%, %A_ScriptName%
else
    FileGetShortcut %LF%, SPath
AutorunOn := !ErrorLevel
if AutorunOn
{
    IfNotEqual SPath, A_ScriptFullPath
    { ; update record in case of the script file was moved
        if RegistryMode
            RegWrite, REG_SZ, HKCU, %SK%, %A_ScriptName%, %A_ScriptFullPath%
        else
            FileCreateShortcut %A_ScriptFullPath%, %LF%, %A_ScriptDir%
        AutorunOn := !ErrorLevel
    }
    if AutorunOn
        Menu Tray, Check, %AutorunMenuItemName%
}

Автор скрипта - Ludens.

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

2

Re: AutoHotkey: менеджер автозагрузки скриптов

Скрипт по управлению скриптами, с графическим интерфейсом. Показывает список всех скриптов AHK в указанной папке, позволяет:
1. Через контекстное меню быстро открыть выбранный в списке скрипт в указанном текстовом редакторе (путь к текстовому редактору задаётся в начале этого скрипта-менеджера).
2. Через контекстное меню быстро поместить выбранный в списке скрипт в автозагрузку (в реестр, HKLM), убрать из автозагрузки.
3. Через контекстное меню или двойным щелчком быстро запустить/остановить выбранный в списке скрипт.

DetectHiddenWindows, On
SetTitleMatchMode, 2

;********Определяем переменные***********
RS=SOFTWARE\Microsoft\Windows\CurrentVersion\Run ;Ключ реестра отвечающий за автозагрузку 
Scrip_Path=D:\Programs\Scripts    ; Папка со скриптами
EditProg=%ProgramFiles%\Notepad++\notepad++.exe ;Программа, в которой скрипты редактируем

    Gui, Add, ListView, x16 y17 w300 h200 Grid gMyListView, Имя скрипта |Состояние | автозапуск
    Gui, Show, x131 y91 h250 w350, Управление скриптами AHK
    
    Menu, MyContext, Add, Start/Stop, RunStop
    Menu, MyContext, Add, &Edit, Edit
    Menu, MyContext, Add, &Autorun On/Off, AutorunOnOff
    Menu, MyContext, Add, &Exit , GuiClose
    Menu, MyContext, Default, Start/Stop

    
;******************Сканируем папку на наличие файлов *.ahk**********    
    loop, %Scrip_Path%\*.ahk {    
        LV_Add("", A_LoopFileName  ) ; Добавляем файл в таблицу
        WinGetTitle, WinExist,  %A_LoopFileName%
        If not WinExist=""                        ; Проверяем запущен ли он
            LV_Modify(A_Index, "Col" 2, "run" ) ; Записываем результат проверки
        n:=A_Index
        ;*************Проверка есть ли скрипт в автозагрузке*******
        Loop, HKLM , %RS%
        {
            RegRead, regPath, HKLM,  %RS%, %A_LoopRegName%
            If A_LoopFileFullPath=%regPath%
            LV_Modify(n, "Col" 3, "autorun" )
        }
        
    }
    LV_ModifyCol(1 , "Auto") 
    SetTimer, RunChek, 500  ; Периодически проверяем ситуацию 
return
    
GuiContextMenu: ; Запускается в ответ на щелчок правой клавишей мыши или на нажатие клавиши Apps.
    Menu, MyContext, Show, %A_GuiX%, %A_GuiY%
return

;***************Определяем, что по двойному щелчку запуск/остановка скрипта*******
MyListView:
if A_GuiEvent = DoubleClick  
    GoSub, RunStop
return

;************запуск и остановка скрипта*******************
RunStop:
    FocusedRowNumber := LV_GetNext(0, "F")
    LV_GetText(script_name, FocusedRowNumber)
    IfWinNotExist, %script_name% 
    {
        run, %Scrip_Path%\%script_name%
        LV_Modify(FocusedRowNumber, "Col" 2, "run" )
    }
    else {
        WinClose, %script_name%
        LV_Modify(FocusedRowNumber, "Col" 2, "" ) 
    }
Return

;****************Редактирование скрипта***************
Edit:
    FocusedRowNumber := LV_GetNext(0, "F")
    LV_GetText(script_name, FocusedRowNumber)
    run, %EditProg% "%Scrip_Path%\%script_name%"
Return
    
;****************Включение скрипта в автозагрузку или удаление оттуда*****    
AutorunOnOff:
    FocusedRowNumber := LV_GetNext(0, "F")
    LV_GetText(registry_state, FocusedRowNumber, 3)
    LV_GetText(script_name, FocusedRowNumber)
    If registry_state=
        {
            RegWrite, REG_SZ,  HKLM, %RS%, %script_name%, %Scrip_Path%\%script_name%
            LV_Modify(FocusedRowNumber, "Col" 3, "autorun" )
        }
        else {
            RegDelete, HKLM, %RS%, %script_name%
            LV_Modify(FocusedRowNumber, "Col" 3, "" )
        }
Return

;******************Регулярная перепроверка какие скрипты запущены*******
RunChek:
    Loop % LV_GetCount()    {
        LV_GetText(RetrievedText, A_Index)
        IfWinNotExist, %RetrievedText%
            LV_Modify(A_Index,"Col" 2, "") 
    }
return

GuiClose:
    ExitApp
Return

Автор скрипта - zemlak.

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