По просьбе The gray Cardinal'а заменил ссылку на топик, где мы с Ludens обсуждаем эту тему, на текст ниже:
Откомпилированный AHK-скрипт (в виде exe-файла) может содержать только один значок - тот, который будет виден в Windows Explorer'e. При желании его можно показывать и в трее, указав в коде скрипта:
Menu Tray, Icon, %A_ScriptFullPath%
А вот что делать, если хочется динамически менять значки в трее во время работы скрипта?
Можно поступить так:
Вариант первый (очевидный):
Поместить каждый из используемых значков в отдельный ico-файл. И вызывать их обычным образом.
Недостаток: вместе со скриптом нужно носить эти отдельные значки.
Вариант второй (столь же очевидный): собрать все те значки, которые планируется использовать в скрипте, в одну DLL. (Это делается какой-нибудь заточенной под это прогой, например, IconWorkshop). И обращаться из скрипта к значку по её номеру в DLL.
Недостаток: вместе со скриптом нужно носить эту dll-шку, а это немногим лучше, чем носить отдельные значки.
Вариант третий (очевидный, но не столь) : использовать команду FileInstall. Она при компиляции поместит указанные значки в экзешник. А при запуске этого экзешника распакует их в указанную папку. После чего ими уже можно пользоваться примерно так:
FileInstall, D:\MyIcons\UnZip.ico, %A_Temp%\UnZip.ico
Недостаток: временные файлы из папки TEMP могут быть удалены (сторонней прогой, например) прямо в процессе выполнения скрипта. Тогда скрипт обломается загрузить нужный значок. Это нужно учитывать в скрипте. Заодно нужно не забыть убрать за собой мусор: OnExit
Вариант четвертый (самый геморный, но, в некоторых случаях, наиболее удобный):
Открыть файл ...AutoHotkey\Compiler\AutoHotkeySC.bin, например, ResHacker'ом и навтыкать туда нужные значки ("Action"->"Add a new Resource..."). Тогда эти значки будут в откомпилированном скрипте. И обращаться к ним можно обычным образом (по номеру в группе).
Недостаток: нужна некоторая сноровка, чтобы ещё до компиляции прикинуть какой номер будет у значка в откомпилированном скрипте.
Ценное добавление от Ludens:
Собственно, значки туда можно даже не добавлять, а просто заменять уже имеющиеся: их там целых семь штук, все семеро компилятор все равно в обязательном порядке помещает в финальный .exe-файл, хотя в отлаженном скрипте эти значки, как правило, вообще не нужны. Поэтому можно заменить их хоть все (так, как я описывал выше, прим. Androgen) и обращаться из скрипта к любой из них:
Menu Tray, Icon, %A_ScriptFullPath%, N
где N -- порядковый номер от от 1 до 7.
Этих семи мест, на мой вкус, вполне хватает даже для небольшой анимации в трее. Способ, конечно, не самый перфектный, но, покуда нет другого, можно держать по отдельному экземпляру AutoHotkeySC.bin для каждого проекта.
Кстати, это позволяет вставлять в итоговый exe-файл не только специальные иконки, но и специальные данные для его Properties (тех, что видны из Windows Explorer) - имя производителя, номер версии и т. п. Эти вещи тоже невозможно задать штатными средствами AHK, но их можно поменять в AutoHotkeySC.bin.
А вообще, Крис уже давно обещает решить эту проблемку, но пока - увы...
Дополнено 14.04.2007
А вот и не "увы". Теперь помещать значки в уже откомпилированный скрипт и прописывать в него информацию о версии можно проще простого. Чел под именем Talon сделал скрипт с GUI для этого. Скрипт делает всё то, что описано здесь (в посте #3), но не через ковыряние руками, а через удобный интерфейс. Можно сохранять и загружать различные проекты буквально парой кликов. Очень удобно. Рекомендую. Взять можно здесь. Для работы скрипта требуется ResHacker.
Крокодил, крокожу и буду крокодить! (Твёрдое обещание нетрезвого кодера).