Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Как правильно установить AutoHotkey

Автор статьи - Androgen Belkin


На самом деле статью лучше было бы назвать "Как установить (и, при желании, удалить) AutoHotkey в два клика так, как вам хотелось бы и при этом не использовать стандартный инсталлятор". Но так слишком длинно. Поэтому – назвал, как назвал. Итак…

Как известно, AutoHotkey распространяется в виде архива (zip), и в виде инсталлятора (ехе). Соответственно и действовать можно по двум вариантам.

Вариант 1. Можно скачать zip, распаковать, дважды кликнуть по какому-нибудь файлу *.ahk и связать его с AutoHotkey.exe. Теперь скрипты (здесь и далее, разумеется, имеются в виду скрипты AutoHotkey) будут запускаться. Но этот путь имеет свои недостатки. А именно: если вы захотите передать скрипту какие-нибудь параметры, то перед полным путем к скрипту нужно указывать полный путь к AutoHotkey.exe. Например, так:

"C:\Program Files\AutoHotkey\AutoHotkey.exe" "D:\AHK\Param2Script.ahk" /orange /apple /test

Кроме того, нельзя перетаскивать файлы на скрипты, чтобы он принимал их как параметры в обработку. Это явно неудобно.

Из дополнительных неудобств: иконка скриптов будет, как и у самого AutoHotkey.exe (на мой взгляд, крайне убогая иконка). Не создается контекстное меню для файлов *.ahk. (Компилировать, Редактировать). Есть и некоторые другие неудобства, которые я не стану рассматривать, чтобы не отнимать ваше время.

Вариант 2. С другой стороны, инсталлятор исправляет все эти недостатки, но создает другие. Например, все пункты контекстного меню не только на английском, но еще и один пункт лишний (дублирующий). Откомпилированные из контекстного меню скрипты имеют ту же иконку, что и сам AutoHotkey, (а сами скрипты - опять же имеют невзрачненькую иконку). Создается куча ярлыков (а я вообще не пользуюсь меню "Пуск", нафиг мне все эти ярлыки). Есть и еще неудобства для меня, но и опять я не стану грузить вас зазря.

А вот ситуация: пришел я со своими скриптами туда, где не установлен AutoHotkey. И должен проделать либо первый, либо второй варианты. У первого варианта недостатки не нравящиеся мне, у второго - напрягающие хозяина компа (мало кому нравится, когда невесть кто устанавливает невесть что). Кроме того, оба варианта требуют телодвижений, тем более досадных, что скрипты как раз для того и пишутся (мной, по крайней мере), чтобы экономить телодвижения. Вот я и написал свой "инсталлятор", в два клика делающий нужные записи в реестр, и в три - убирающие созданный "мусор" (мусор он - для того, кто и знать ничего не хочет про какой-то там AutoHotkey). Этот скрипт будет ниже, а сначала - файл реестра, где перечислены все создаваемые стандартным инсталлятором разделы и параметры. Если вы вдруг не сильны в реестре, то я снабдил всё комментариями, так что разобраться не составит труда. Итак, файл реестра:

REGEDIT4

; Часть создаваемых стандартным инсталлятором разделов и параметров, на мой взгляд - лишние.
; Их можно смело опустить.

; Регистрация расширения ahk
[HKEY_CLASSES_ROOT\.ahk]
@="AutoHotkeyScript"

; Регистрация шаблона для меню создать (+ файл Template.ahk в %WinDir%\ShellNew)
; Раздел можно опустить
[HKEY_CLASSES_ROOT\.ahk\ShellNew]
"FileName"="Template.ahk"

; Регистрация класса и всплывающей подсказки на скрипте
; (можно изменить на, например, @="Скрипт AutoHotkey")
[HKEY_CLASSES_ROOT\AutoHotkeyScript]
@="AutoHotkey Script"

; Иконка скрипта 
; (можно изменить на свою, например, @="С:\\Icon\\AutoHotkey\\AHK_Script.ico")
[HKEY_CLASSES_ROOT\AutoHotkeyScript\DefaultIcon]
@="C:\\Program Files\\AutoHotkey\\AutoHotkey.exe,1"

; Действие по умолчанию при двойном клике (имя подраздела Shell)
; Если не задать этот параметр, то действием по умолчанию будет команда "Open"
[HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell]
@="Run"

; Запустить скрипт (имя в контекстном меню, можно изменить на, например, @="Запустить скрипт")
; Можно опустить весь этот раздел и его подраздел, т.к. они дублирует команду Open
; Зачем два одинаковых действия в контекстном меню?
[HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Run]
@="Run Script"

; Собственно команда на выполнение скрипта 
; (ВАЖНО: %* - означает возможность принимать скриптом параметры)
[HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Run\Command]
@="\"C:\\Program Files\\AutoHotkey\\AutoHotkey.exe\" \"%1\" %*"

; Пункт контекстного меню "Компилировать"
; (можно так и написать @="Компилировать")
; Можно опустить весь этот раздел и его подраздел
[HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Compile]
@="Compile Script"

; Собственно команда на компиляцию: путь к компилятору и параметры, передаваемые ему. 
; (можно, например, добавить свою иконку, пароль и т.д. - см. справку)
[HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Compile\Command]
@="\"C:\\Program Files\\AutoHotkey\\Compiler\\Ahk2Exe.exe\" /in \"%l\""

; Пункт контекстного меню для открытия скрипта в редакторе
; Можно опустить весь этот раздел и его подраздел
; А можно опустить параметр @="Edit Script", тогда в конт. меню
; будет пункт со стандартным именем "изменить", в русской винде, разумеется.
; (а можно прямо так и написать @="Редактировать скрипт")
[HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Edit]
@="Edit Script"

; Собственно команда на редактирование. Мои РЕКОМЕНДАЦИИ такие:
; Путь к вашему редактору скриптов лучше заключить в кавычки, как и параметр.
; Например, так:
; @="\"C:\\Program Files\\PSPad\\PSPad.exe\" \"%1\""
[HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Edit\Command]
@="notepad.exe %1"

; Пункт контекстного меню "Открыть" (выполнить скрипт).
; А можно опустить только параметр @="Open", и тогда в конт. меню будет 
; стандартный пункт "Открыть", а можно так и написать @="Запустить скрипт"
[HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Open]
@="Open"

; Собственно команда на открытие (выполнение) скрипта 
; (ВАЖНО: %* - означает возможность принимать скриптом параметры)
[HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Open\Command]
@="\"C:\\Program Files\\AutoHotkey\\AutoHotkey.exe\" \"%1\" %*"

; DropHandler. Позволяет перетаскивать файлы на скрипт.
; Обработчик тот же, что и у bat-файлов или других исполнимых файлов, 
; поэтому имена на обработку передаются в DOS виде.
; Этот раздел создается, только если при установке выбран соответствующий пункт,
; и только на винде старше WIN98.
; Раздел можно опустить
[HKEY_CLASSES_ROOT\AutoHotkeyScript\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

; В этом разделе откомпилированные скрипты ищут путь к AutoHotkey.exe и его версию.
; Раздел можно опустить, но лучше оставить
[HKEY_LOCAL_MACHINE\SOFTWARE\AutoHotkey]
"InstallDir"="C:\\Program Files\\AutoHotkey"
"Version"="1.0.44.07"

; Это псевдоним для запуска из командной строки Ahk2Exe.exe, без указания пути к нему.
; Т.е. можно в ком. строку ввести Ahk2Exe, и он запустится.
; Раздел можно опустить 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Ahk2Exe.exe]
@="C:\\Program Files\\AutoHotkey\\Compiler\\Ahk2Exe.exe"

; Это псевдоним для запуска из командной строки AU3_Spy.exe, без указания пути к нему.
; Т.е. можно в ком. строку ввести AU3_Spy, и он запустится.
; Раздел можно опустить 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AU3_Spy.exe]
@="C:\\Program Files\\AutoHotkey\\AU3_Spy.exe"

; Это псевдоним для запуска из командной строки AutoHotkey.exe, без указания пути к нему.
; Т.е. можно в ком. строку ввести AutoHotkey, и он запустится.
; Раздел можно опустить 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AutoHotkey.exe]
@="C:\\Program Files\\AutoHotkey\\AutoHotkey.exe"

; Это псевдоним для запуска из командной строки AutoScriptWriter.exe, без указания пути к нему.
; Т.е. можно в ком. строку ввести AutoScriptWriter, и он запустится.
; Раздел можно опустить 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AutoScriptWriter.exe]
@="C:\\Program Files\\AutoHotkey\\AutoScriptWriter\\AutoScriptWriter.exe"

; Это раздел для отображения информации в стандартном апплете "Установка и удаление программ"
; Раздел можно опустить 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AutoHotkey]
"DisplayIcon"="C:\\Program Files\\AutoHotkey\\AutoHotkey.exe"
"DisplayName"="AutoHotkey 1.0.44.07"
"DisplayVersion"="1.0.44.07"
"Publisher"="Chris Mallett"
"UninstallString"="C:\\Program Files\\AutoHotkey\\uninst.exe"
"URLInfoAbout"="http://www.autohotkey.com"

А теперь - мой инсталлятор. На самом деле предлагаемый скрипт - фрагмент моего большого спец инсталлятора, делающего сразу туеву хучу всяких операций, чтобы я в несколько кликов оказывался как дома, и в несколько - возвращал все "взад". Но здесь - только про AutoHotkey.

Все создаваемые пункты контекстного меню - на русском. Назначается свой редактор скриптов, своя иконка для скриптов и своя - для скриптов, откомпилированных из контекстного меню (чтобы сразу была видна разница между ними). Ну и т.д. - посмотрите сами. Запускать скрипт можно безбоязненно, т.к. он ничего не сделает, пока не нажмете кнопку "Принять". (Да и после нажатия этой кнопки ничего страшного не случится). Удалить все сделанные записи из реестра можно такой маленькой кнопочкой справа-внизу (тоже подтвердив удаление). Перед запуском скрипт следует поместить либо в ту папку, где лежит AutoHotkey.exe, либо в какую-нибудь подпапку. Я, например, в папке AutoHotkey создал подпапку Icons, куда кладу нужные иконки. И создал подпапку _MyFiles, куда кладу (помимо прочего) этот скрипт, и батничек для запуска этого скрипта (AutoHotkey ведь пока еще не зарегистрирован в реестре). Можно, конечно, откомпилировать скрипт в exe-шник, но мне больше нравится так (вдруг чего поправить захочется). Сами иконки я, к сожалению, приложить сюда не могу, поэтому подберите свои, а вот батничек на всякий случай прилагается.

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

Добавлю, что скрипт удобно использовать при перемещении папки с установленным AutoHotkey (он скорректирует все пути), а также при обновлении записей в реестре о версии AutoHotkey (при "установке" новой версии из zip-архива).

;*******************************************************************************
; AutoHotkey Version:   1.0.43.08
; Автор:                Androgen Belkin
; Имя скрипта:          AutoHotkey_Install.ahk (v.1.2)
;*******************************************************************************
; Зарегистрировать расширение ahk и создать контекстное меню для него.
; Назначить редактор, возможность поиска строк в скриптах для Windows,
; разрешить drag-n-drop файлов на скрипт. Всё - опционально, т.е. по желанию :)
;*******************************************************************************
#NoTrayIcon ; не отображать иконку скрипта в трее
#NoEnv      ; запрещаем имена переменных как у переменных окружения (повышаем производительность скрипта)

;-------------------------------------------------------------------------------
; НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ
; название для пункта контекстного меню "Запустить скрипт" (это будет действие по умолчанию,
; поэтому имя команды не будет отображаться в контекстном меню. Запись создается для удобства
; при просмотре реестра.)
nRun = Запустить скрипт
nCompile = Компи&лировать               ; название для пункта контекстного меню "Компилировать"
nEdit = Открыть в &редакторе            ; название для пункта контекстного меню "Открыть в редакторе"
AHK_Tip = Скрипт AutoHotkey             ; всплывающая подсказка на скриптах
Editor_Path = %A_Windir%\Notepad.exe    ; редактор для скриптов (можно изменить в процессе работы этого скрипта)
; предлагать ли вместо указанного редактора PsPad, если он найден в реестре (1/0)
Suggest_PsPad = 1
; ниже задаются относительные пути для иконок и компилятора (относительно расположения AutoHotkey.exe)
; иконка для скрипта (если не указана, или указана неверно, то будет стандартная)
Script_Icon = Icons\AHK_Green.ico
; иконка для откомпилированного скрипта (если не указана, или указана неверно, то будет стандартная)
Compile_Icon = Icons\AHK_Violet.ico
Compiler_Path = Compiler\Ahk2Exe.exe    ; путь к компилятору скриптов
; КОНЕЦ НАСТРОЕК ПОЛЬЗОВАТЕЛЯ
;-------------------------------------------------------------------------------

; ПРОВЕРКА ПРАВИЛЬНОСТИ ПУТИ ЗАПУСКА СКРИПТА
; для начала ищем AutoHotkey.exe в папке, где запущен этот скрипт
AutoHotkey_Path = %A_ScriptDir%\AutoHotkey.exe
IfNotExist, %AutoHotkey_Path% ; если в текущей папке НЕ найден AutoHotkey.exe, то...
{
    ; пробуем найти его на уровень выше
    StringGetPos, Pos_Slash, A_ScriptDir, \, R ; получить позицию последнего слеша в строке пути
    StringLeft, Path_Level_Up, A_ScriptDir, Pos_Slash ; взять из строки путь, отбросив последнюю папку
    AutoHotkey_Path = %Path_Level_Up%\AutoHotkey.exe ; теперь ищем AutoHotkey.exe в папке на уровень выше
    IfNotExist, %AutoHotkey_Path% ; если и здесь НЕ найден AutoHotkey.exe, то...
    {
        MsgBox, 64, AutoHotkey не найден!, ; показываем сообщение
        (
        Скрипт следует запускать из папки, содержащей файл "AutoHotkey.exe".
                                     Или из её подпапки.
        )
        ExitApp ; конец скрипта
    }
}

; ЕСЛИ AUTOHOTKEY.EXE НАЙДЕН, ТО ПРОДОЛЖАЕМ
SplitPath, AutoHotkey_Path,, AutoHotkey_Dir ; вычисляем папку, где найден AutoHotkey.exe

; Проверяем, указана ли иконка для скриптов *.ahk (и верен ли путь к ней)
IfExist, %AutoHotkey_Dir%\%Script_Icon% ; если иконка скрипта на месте, то...
    MyIcon_Path = %AutoHotkey_Dir%\%Script_Icon% ; назначить путь для своей иконки скриптов *.ahk

; Проверяем, указана ли иконка для откомпилированных скриптов *.ahk (и верен ли путь к ней)
IfExist, %AutoHotkey_Dir%\%Compile_Icon% ; если иконка для компиляции скрипта на месте, то...
    ; назначить команду и путь для иконки откомпилированных скриптов *.ahk
    MyIconCompile_Path = /icon "%AutoHotkey_Dir%\%Compile_Icon%"

; Проверяем наличие компилятора
IfExist, %AutoHotkey_Dir%\%Compiler_Path% ; проверяем наличие компилятора
    Compiler = 1 ; флаг, что компилятор найден

; ПРОВЕРЯЕМ, МОЖНО И НУЖНО ЛИ НАЗНАЧАТЬ РЕДАКТОРОМ PSPAD
RegRead, PSPad_Path, HKCU, Software\PSPad, PSPadPath ; прочитать путь к PSPad в реестре
; если в реестре указан путь к PSPad и в настройках указано предлагать PsPad, то...
If (ErrorLevel = 0 AND Suggest_PsPad = 1)
{
    StringReplace, PSPad_Path, PSPad_Path, ",, All ; удалить из найденного в реестре пути кавычки
    Editor_Path = %PSPad_Path% ; предложить редактором скриптов PsPad
}

; СОЗДАНИЕ GUI
Gui, Font, s8, Arial ; задать стандартный шрифт, чтобы на разных системах не портился GUI
; группа 1 (обводная рамка)
Gui, Add, GroupBox, Center R2 w444, Связать скрипты *.ahk с исполнимым файлом AutoHotkey.exe
; чекбокс
Gui, Add, Checkbox, Checked xp+10 yp+18 vMyExtention gMyExtention, З&арегистрировать расширение *.ahk
Gui, Add, Checkbox, Checked xp+20 yp+20 vMyS_Icon, Назначить свою &иконку для скриптов ; чекбокс
If Not MyIcon_Path ; если своя иконка для скрипта не была найдена, то...
{
    GuiControl,, Button3, 0 ; снять отметку с чекбокса "Назначить свою иконку для скриптов"
    GuiControl, Disabled, Button3 ; отключить чекбокс "Назначить свою иконку для скриптов"
}

; группа 2 (обводная рамка)
Gui, Add, GroupBox, Center R5.3 xm w444, Добавить в контекстное меню скриптов *.ahk пункты:
Gui, Add, Checkbox, Checked xp+10 yp+18 vMyCompile gMyCompile, %nCompile% ; чекбокс "Компилировать"
; чекбокс
Gui, Add, Checkbox, Checked xp+20 yp+20 vMyC_Icon, Назначить свою &иконку для откомпилированных скриптов
If Not Compiler ; если компилятор не был найден, то...
{
    GuiControl,, Button5, 0 ; снять отметку с чекбокса "Компилировать"
    GuiControl, Disabled, Button5 ; отключить чекбокс "Компилировать"
}
; если не найдена иконка для откомпилированного скрипта или компилятор, то...
If (Not MyIconCompile_Path OR Not Compiler)
{
    GuiControl,, Button6, 0 ; снять отметку с чекбокса "Назначить свою иконку для откомпилированных скриптов"
    GuiControl, Disabled, Button6 ; отключить чекбокс "Назначить свою иконку для откомпилированных скриптов"
}
Gui, Add, Checkbox, Checked xp-20 yp+20 gMyEdit vMyEdit, %nEdit% ; чекбокс "Открыть в редакторе"
; надпись
Gui, Add, Text, yp+18, Укажите путь к редактору`, который вы хотите использовать для скриптов *.ahk:
Gui, Add, Edit, wp-16 yp+17 vMyEditor, %Editor_Path% ; поле ввода пути к редактору
Gui, Add, Button, x+3 yp-1 gBrowseEditorPath, ... ; кнопка "обзор"

Gui, Add, GroupBox, Center R5 xm w444, Дополнительные действия ; группа 3 (обводная рамка)
; надпись
Gui, Add, Text, xp+10 yp+16 cRed
, %A_Space% Снятие галочек в этой группе удаляет соответствующие настройки из реестра
Gui, Add, Checkbox, Checked vMyHKLM
, &Создать запись в HKEY_LOCAL_MACHINE (там обычно ищут путь к AutoHotkey) ; чекбокс
Gui, Add, Checkbox, vMyAppPaths
, Со&здать псевдоним в App Paths для запуска AutoHotkey.exe без указания пути ; чекбокс
Gui, Add, Checkbox, vMyDropHandler, Разрешить пере&таскивание файлов на скрипты ; чекбокс
Gui, Add, Checkbox, vMyPersistentHandler
, Разрешить при &встроенном поиске Windows поиск внутри скриптов *.ahk ; чекбокс
Gui, Add, Button, x105 w100 Default, &Принять ; кнопка
Gui, Add, Button, x259 yp w100, &Отмена ; кнопка
Gui, Add, Button, x+66 gMyDel, %A_Space%-%A_Space% ; кнопка
Gui, Show, AutoSize Center, Регистрация скриптов AutoHotkey - Androgen® ; отобразить окно по центру
Return ; остановить выполнение скрипта до принятия пользователем выборов


; ОБРАБОТКА СОБЫТИЙ GUI
; Кнопки, закрывающие окно
GuiEscape: ; если нажата Escape
GuiClose: ; если нажата кнопка "закрыть" ...
ButtonОтмена: ; если нажата кнопка "отмена" ...
ExitApp ; конец скрипта

; Чекбокс "Зарегистрировать расширение *.ahk"
MyExtention: ; реагирование на снятие/постановку галочки в чекбоксе "Зарегистрировать расширение *.ahk"
; проверить, стоит ли галочка на "Зарегистрировать расширение *.ahk"
ControlGet, Checked_Edit, Checked,, Button2, ahk_class AutoHotkeyGUI
If Checked_Edit = 0 ; если галочки нет, то...
    ; отключить чекбокс "Назначить свою иконку для скриптов"
    Control, Disable,, Button3, ahk_class AutoHotkeyGUI
Else If MyIcon_Path ; если галочка есть и если своя иконка найдена, то...
    ; подключить чекбокс "Назначить свою иконку для скриптов"
    Control, Enable,, Button3, ahk_class AutoHotkeyGUI
Return ; конец подпрограммы событий в GUI

; Чекбокс "Компилировать"
MyCompile: ; реагирование на снятие/постановку галочки в чекбоксе "Компилировать"
; проверить, стоит ли галочка на "Компилировать"
ControlGet, Checked_Edit, Checked,, Button5, ahk_class AutoHotkeyGUI
If Checked_Edit = 0 ; если галочки нет, то...
    ; отключить чекбокс "Назначить свою иконку для откомпилированных скриптов"
    Control, Disable,, Button6, ahk_class AutoHotkeyGUI
Else If MyIconCompile_Path ; если галочка есть и если своя иконка найдена, то...
    ; подключить чекбокс "Назначить свою иконку для откомпилированных скриптов"
    Control, Enable,, Button6, ahk_class AutoHotkeyGUI
Return ; конец подпрограммы событий в GUI

; Чекбокс "Открыть в редакторе"
MyEdit: ; реагирование на снятие/постановку галочки в чекбоксе "Открыть в редакторе"
; проверить, стоит ли галочка на "Открыть в редакторе"
ControlGet, Checked_Edit, Checked,, Button7, ahk_class AutoHotkeyGUI
If Checked_Edit = 0 ; если галочки нет, то отключить контролы
{
    Control, Disable,, Static1, ahk_class AutoHotkeyGUI
    Control, Disable,, Edit1, ahk_class AutoHotkeyGUI
}
Else ; если галочка есть, то подключить контролы
{
    Control, Enable,, Static1, ahk_class AutoHotkeyGUI
    Control, Enable,, Edit1, ahk_class AutoHotkeyGUI
}
Return ; конец подпрограммы событий в GUI

; Кнопка "Обзор редактора скриптов"
BrowseEditorPath:
Gui +OwnDialogs ; диалог выбора файла будет модальным
; 3 указывает, что файл должен быть найден
FileSelectFile, SelectedFile, 3,, Укажите свой редактор скриптов, Исполнимые файлы (*.exe)
if SelectedFile ; если файл был выбран, то...
    GuiControl,, Edit1, %SelectedFile% ; вставить полученный экзешник в редактируемое поле
Return ; конец подпрограммы событий в GUI

; Кнопка "Удалить настройки из реестра"
MyDel:
Gui +OwnDialogs ; запрос будет модальным
; назначить вторую кнопку "по умолчанию"
MsgBox, 305, Внимание!, Удалить из реестра все сделанные записи, связанные с AutoHotkey?
IfMsgBox OK ; если ответ ОК, то...
{
    RegDelete, HKCR, .ahk ; удалить регистрацию расширения *.ahk
    RegDelete, HKCR, AutoHotkeyScript ; удалить класс расширения
    RegDelete, HKCU, SOFTWARE\AutoHotkey ; удалить настройки из HKEY_CURRENT_USER
    RegDelete, HKLM, SOFTWARE\AutoHotkey ; удалить настройки из HKEY_LOCAL_MACHINE
    ; удалить псевдоним из App Paths
    RegDelete, HKLM, SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AutoHotkey.exe
    ExitApp ; конец скрипта
}
Return ; конец подпрограммы событий в GUI

; Кнопка "Принять"
ButtonПринять: ; обработать нажатие кнопки "Принять"
    Gui, Submit ; сохранить все контролы в соответствующих переменных
    Gui, Destroy ; удалить окно GUI

    ; Создаем команды для скриптов
    Run_Command = "%AutoHotkey_Path%" "`%1" `%* ; команда на запуск скриптов
    Compile_Command = "%AutoHotkey_Dir%\%Compiler_Path%" /in "`%l" ; команда на компиляцию скриптов
    Edit_Command = "%MyEditor%" "`%1" ; команда на редактирование скриптов

    ; ЗАПИСЬ В РЕЕСТР ВЫБРАННЫХ ПАРАМЕТРОВ
    If MyExtention = 1 ; если указано ассоциировать скрипты *.ahk, то...
    {
        RegWrite, REG_SZ, HKCR, .ahk,, AutoHotkeyScript ; зарегистрировать расширение *.ahk
        RegWrite, REG_SZ, HKCR, AutoHotkeyScript,, %AHK_Tip% ; записать всплывающую подсказку
        ; указываем, что по умолчанию (при двойном клике) будет команда Run
        RegWrite, REG_SZ, HKCR, AutoHotkeyScript\Shell,, Open
        ; записать имя команды на запуск скриптов
        RegWrite, REG_SZ, HKCR, AutoHotkeyScript\Shell\Open,, %nRun%
        ; записать команду на запуск скриптов
        RegWrite, REG_SZ, HKCR, AutoHotkeyScript\Shell\Open\Command,, %Run_Command%
        If MyS_Icon = 1 ; если указано назначить свою иконку для скриптов, то...
            ; записать свою иконку для скриптов
            RegWrite, REG_SZ, HKCR, AutoHotkeyScript\DefaultIcon,, %MyIcon_Path%
        Else ; если НЕ указано назначить свою иконку, то...
            ; записать стандартную иконку для скриптов
            RegWrite, REG_SZ, HKCR, AutoHotkeyScript\DefaultIcon,, %AutoHotkey_Path%`,1
    }

    If MyCompile = 1 ; если указано добавить команду "Компилировать", то...
    {
        ; записать имя команды в контекстном меню
        RegWrite, REG_SZ, HKCR, AutoHotkeyScript\Shell\Compile,, %nCompile%
        If MyC_Icon = 1 ; если указано назначить свою иконку для откомпилированных скриптов, то...
            RegWrite, REG_SZ, HKCR, AutoHotkeyScript\Shell\Compile\Command,
            , %Compile_Command% %MyIconCompile_Path% ; записать команду и свою иконку
        Else ; если НЕ указано назначить свою иконку, то...
            RegWrite, REG_SZ, HKCR, AutoHotkeyScript\Shell\Compile\Command,
            , %Compile_Command% ; записать стандартную команду
    }

    If MyEdit = 1 ; если указано добавить команду "Открыть в редакторе", то...
    {
        RegWrite, REG_SZ, HKCR, AutoHotkeyScript\Shell\Edit,, %nEdit% ; записать имя команды
        RegWrite, REG_SZ, HKCR, AutoHotkeyScript\Shell\Edit\Command,, %Edit_Command% ; записать саму команду
    }

    If MyHKLM = 1 ; если указано создать запись в HKEY_LOCAL_MACHINE, то...
    {
        ; записать путь к папке AutoHotkey
        RegWrite, REG_SZ, HKLM, SOFTWARE\AutoHotkey, InstallDir, %AutoHotkey_Dir%
        RegWrite, REG_SZ, HKLM, SOFTWARE\AutoHotkey, Version, %A_AhkVersion% ; записать версию AutoHotkey
    }
    Else
        RegDelete, HKLM, SOFTWARE\AutoHotkey ; удалить раздел

    If MyAppPaths = 1 ; если указано создать для AutoHotkey.exe псевдоним в App Paths, то...
        RegWrite, REG_SZ, HKLM, SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AutoHotkey.exe
        ,, "%AutoHotkey_Path%"
    Else
        RegDelete, HKLM, SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AutoHotkey.exe ; удалить раздел

    If MyDropHandler = 1 ; если указано разрешить перетаскивание файлов на скрипты, то...
        RegWrite, REG_SZ, HKCR, AutoHotkeyScript\Shellex\DropHandler,, {86C86720-42A0-1069-A2E8-08002B30309D}
    Else
        RegDelete, HKCR, AutoHotkeyScript\Shellex\DropHandler ; удалить раздел

    If MyPersistentHandler = 1 ; если указано разрешить при встроенном поиске Windows, поиск внутри скриптов *.ahk
        RegWrite, REG_SZ, HKCR, .ahk\PersistentHandler,, {5e941d80-bf96-11cd-b579-08002b30bfeb}
    Else
        RegDelete, HKCR, .ahk\PersistentHandler ; удалить раздел

    MsgBox, Выбранные действия завершены успешно
ExitApp ; конец скрипта

А вот - батничек для запуска скрипта (если AutoHotkey еще не установлен, и скрипты еще не запускаются). Я назвал его AutoHotkey_Install_Run.bat, но, конечно, его имя не принципиально. А вот имя вызываемого файла скрипта - принципиально. Если скрипт будет у вас под другим именем, то измените его (имя) здесь.

Rem Запустить скрипт, регистрирующий в системе скрипты *.ahk
Rem Батник должен быть "рядом" с AutoHotkey_Install.ahk
Rem И оба они должны быть в папке, где лежит AutoHotkey.exe, или в подпапке.

If Exist AutoHotkey.exe (
Start AutoHotkey.exe AutoHotkey_Install.ahk
) ELSE (
Start ..\AutoHotkey.exe AutoHotkey_Install.ahk
)

Хочется верить, что вам пригодится написанное. Будут вопросы, предложения, отзывы - как обычно - прошу на форум.

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.