MandarinKa02 пишет:Скачиваем из интернета файл-компилятор
teadrinker пишет:без FileInstall не обойтись
Все таки еще раз спрошу, зачем "компилировать"?
Мою ссылку выше проигнорировали, сделаю большую копипасту.
Интерпретатор AutoHotkey при запуске ищет одноименный с ним .ahk в своей директории и если находит, выполняет его.
Интерпретатор можно взять в папке, где установлен AutoHotkey (C:\Program Files\AutoHotkey\AutoHotkey.exe).
Интерпретатор можно переименовать как вам угодно, главное чтобы у .ahk скрипта было такое же имя.
Иконку можно изменить с помощью Menu Tray, Icon, MyScript.ico.
Примерное содержимое папки с переименованным интерпретатором и скриптом:
..
.git
MyScript.ahk —> это ваш скрипт
MyScript.exe (да, да, это переименованный AutoHotkey.exe, рекомендую юникод 32-битную версию AutoHotkeyU32.exe)
MyScript.ico
MyScript.ini
MyScript.png
Пользователь кликает по файлу MyScript.exe, а в результате исполняется MyScript.ahk.
Плюсы такого подхода:
• Избавление от возни с "компилированием". Когда вы хотите поделиться с кем-то скриптом, просто архивируете папку и отправляете ее.
• Легкое обновление. Чтобы обновить скрипт, не нужно передавать/скачивать мегабайты интерпретатора и FileInstall.
• Нет проблем с антивирусами. На любой "скомпилированный" скрипт будет десяток ложных детектов, что легко проверить на VirusTotal.
• Из основного скрипта можно выполнить произвольный файл ahk: Run % A_AhkPath " " A_ScriptDir "\SomeScript.ahk", % A_ScriptDir.
Минусы:
• Два файла вместо одного и еще, возможно, файл иконки.
Но если используется #FileInstall, то уже без разницы, потому что и так будет лежать в отдельной папке. Вас ведь не напрягает что установленные в Program Files программы состоят не из одного файла? Да и портативные, состоящие из одного файла весьма редки, будет как минимум файл настроек (.ini). Запускать скрипты также можно ярлыками, на флешке - лаунчерами, нужно просто передать интерпретатору в параметрах путь к скрипту. Ярлык можно создать при первом запуске, т.е. первый раз пользователь запускает из папки, затем по созданному скриптом ярлыку.
If Not FileExist(A_ScriptDir "\MyScript.ini") ; MyScript.ini создается после первого запуска
FileCreateShortcut, "%A_AHKPath%", %A_Desktop%\MyScript.lnk, "%A_ScriptDir%", "%A_ScriptFullPath%",, %A_ScriptDir%\resource\MyScript.ico
•
Но если все же нужно выполнять произвольный код (а-ля eval) из скомпилированного скрипта, то "компилируйте" с помощью ahk_h — он полностью совместимым с обычным ahk кодом, но в нем есть дополнительные возможности, одна из которых позволяет выполнять произвольный код из переменной (файла, и т.п.).