1 (изменено: Waveshaper, 2016-05-23 23:10:30)

Тема: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Вот таким образом изменяется иконка в трее, но на панели задач остаётся стандартная зелёная H, возможно ли её тоже изменить?

Menu, Tray, Icon, D:\hdd.ico
OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

2

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

IMAGE_ICON := 1, WM_SETICON := 0x80, ICON_SMALL := 0

iconFile := "D:\hdd.ico"
Menu, Tray, Icon, % iconFile
hIcon := LoadPicture(iconFile, "w16 h-1", IMAGE_ICON)
Gui, +LastFound
SendMessage, WM_SETICON, ICON_SMALL, hIcon
Gui, Show, w300 h200
OnExit(Func("DestroyIcon").Bind(hIcon))
Return

DestroyIcon(hIcon)  {
	DllCall("DestroyIcon", Ptr, hIcon)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
А у Вас работает? У меня этот код не запускается с ошибкой в пятой строке:

hIcon := LoadPicture(iconFile, "w16 h-1", IMAGE_ICON)
OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

4

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Обновите AHK, это новый синтаксис.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
Вы правы, вот только изменились 2 иконки, в трее и слева сверху на рамке окна. На панели же задач стандартная H.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

6

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Проверил на Windows XP. Если сначала сменить иконку, а затем создать окно GUI, то новая иконка будет и на заголовке окна, и в панели задач. Но чтобы её изменить, придётся прибегнуть к команде GUI, Destroy.

7

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

У меня на Windows 7 работает. Ещё так можно попробовать:

IMAGE_ICON := 1, WM_SETICON := 0x80, ICON_SMALL := 0, ICON_BIG := 1

iconFile := "D:\hdd.ico"
Menu, Tray, Icon, % iconFile
hIcon16 := LoadPicture(iconFile, "w16 h-1", IMAGE_ICON)
hIcon32 := LoadPicture(iconFile, "w32 h-1", IMAGE_ICON)
Gui, +LastFound
SendMessage, WM_SETICON, ICON_SMALL, hIcon16
SendMessage, WM_SETICON, ICON_BIG  , hIcon32
Gui, Show, w300 h200
OnExit(Func("DestroyIcon").Bind(hIcon16, hIcon32))
Return

DestroyIcon(hIcon16, hIcon32)  {
	DllCall("DestroyIcon", Ptr, hIcon16)
	DllCall("DestroyIcon", Ptr, hIcon32)
}
ypppu пишет:

Если сначала сменить иконку, а затем создать окно GUI

Это как? У кого иконку менять, если окно не создано?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
К сожалению, не работает, возможно, проблема на моей стороне, т.к. использую разные твики, в том числе 7+ Taskbar Tweaker.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

9

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Ещё так:

IMAGE_ICON := 1, WM_SETICON := 0x80, ICON_SMALL := 0, ICON_BIG := 1

iconFile := "D:\hdd.ico"
Menu, Tray, Icon, % iconFile
hIcon16 := LoadPicture(iconFile, "w16 h-1", IMAGE_ICON)
hIcon32 := LoadPicture(iconFile, "w32 h-1", IMAGE_ICON)
Gui, +LastFound
SendMessage, WM_SETICON, ICON_SMALL, hIcon16,, ahk_id %A_ScriptHwnd%
SendMessage, WM_SETICON, ICON_BIG  , hIcon32
Gui, Show, w300 h200
OnExit(Func("DestroyIcon").Bind(hIcon16, hIcon32))
Return

DestroyIcon(hIcon16, hIcon32)  {
	DllCall("DestroyIcon", Ptr, hIcon16)
	DllCall("DestroyIcon", Ptr, hIcon32)
}

Тогда у всех окон скрипта будут такие иконки.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
Забавно, включил в 7+ Taskbar Tweaker функцию показывать метки, и иконка появилась. Т.е. дело не в твикере, а иконки видны только на широких кнопках, причём с любым из Ваших кодов. Может быть, в 7 немного другая логика панели задач.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

11

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Ещё вариант:

IMAGE_ICON := 1, WM_SETICON := 0x80, ICON_SMALL := 0, ICON_BIG := 1

iconFile := "D:\hdd.ico"
Menu, Tray, Icon, % iconFile
hIcon16 := LoadPicture(iconFile, "w16 h-1", IMAGE_ICON)
hIcon32 := LoadPicture(iconFile, "w32 h-1", IMAGE_ICON)
SendMessage, WM_SETICON, ICON_SMALL, hIcon16,, ahk_id %A_ScriptHwnd%
SendMessage, WM_SETICON, ICON_BIG  , hIcon32,, ahk_id %A_ScriptHwnd%
Gui, Show, w300 h200
OnExit(Func("DestroyIcon").Bind(hIcon16, hIcon32))
Return

DestroyIcon(hIcon16, hIcon32)  {
	DllCall("DestroyIcon", Ptr, hIcon16)
	DllCall("DestroyIcon", Ptr, hIcon32)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

А лучше так:

IMAGE_ICON := 1, WM_SETICON := 0x80, ICON_SMALL := 0, ICON_BIG := 1

iconFile := "D:\hdd.ico"
Menu, Tray, Icon, % iconFile
hIcon16 := LoadPicture(iconFile, "w16 h-1", IMAGE_ICON)
hIcon32 := LoadPicture(iconFile, "w32 h-1", IMAGE_ICON)
DllCall("SendMessage", Ptr, A_ScriptHwnd, UInt, WM_SETICON, Ptr, ICON_SMALL, Ptr, hIcon16)
DllCall("SendMessage", Ptr, A_ScriptHwnd, UInt, WM_SETICON, Ptr, ICON_BIG, Ptr, hIcon32)
Gui, Show, w300 h200
OnExit(Func("DestroyIcon").Bind(hIcon16, hIcon32))
Return

DestroyIcon(hIcon16, hIcon32)  {
	DllCall("DestroyIcon", Ptr, hIcon16)
	DllCall("DestroyIcon", Ptr, hIcon32)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
Точно так же, когда виден лейбл (метка), тогда видна и иконка.

Я припоминаю, такое поведение видел когда-то на 8, когда пытался менять иконки. Поэтому AutoHotkey не виноват. Возможно мои какие-то твики/настройки являются причиной или такое поведение на 8.1 стандартно, просто нужен ещё пользователь с 8.1.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

14 (изменено: teadrinker, 2016-05-24 00:34:51)

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

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

В 7+ Taskbar Tweaker есть функция "Изменить ID приложения" на "Random Group", т.е. панель задач не будет считать это приложение частью C:\Program Files\AutoHotkey\AutoHotkey.exe, так вот, оно меняет и иконку на "маленькой" кнопке. Но только до следующего запуска.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

16

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

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

Скомпилировал, иконка видна, и в опции "Изменить ID приложения", видно, что кнопка принадлежит этому новому exe. И открыл для себя кое-что новое, т.е. такие exe скрипты могут работать как полностью портативные приложения, без установленного AutoHotKey? И я давно хотел способ различать скрипты в диспетчере задач.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

17

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker пишет:

Это как? У кого иконку менять, если окно не создано?

Если в трее изменить иконку, то созданное после этого окно GUI и кнопка на панели задач так же будут с новой иконкой.

18

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Waveshaper пишет:

Скомпилировал, иконка видна

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

Waveshaper пишет:

такие exe скрипты могут работать как полностью портативные приложения, без установленного AutoHotKey?

Точно.

Waveshaper пишет:

И я давно хотел способ различать скрипты в диспетчере задач.

Смотрите столбец «Командная строка».

ypppu пишет:

Если в трее изменить иконку, то созданное после этого окно GUI и кнопка на панели задач так же будут с новой иконкой.

Не знал, но у меня в коде выше и так иконка в трее меняется до создания окна.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
Да, точно, скомпилировал другие. Портативность это вообще отлично, ведь, с помощью AHK, каких только утилит можно наделать. А есть подводные камни, при запуске 10-15 портативных скриптов, хуже производительность и т.д.? Спасибо, командную строку то я упустил ибо чтобы увидеть адреса, нужно диспетчер сильно расширить.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

20

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Waveshaper пишет:

А есть подводные камни, при запуске 10-15 портативных скриптов, хуже производительность и т.д.?

Не сталкивался, лишь бы оперативной памяти хватило.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
Спасибо, буду использовать.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

22

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Чтобы не создавать новую тему, спрошу здесь, а возможно ли в скомпилированный .exe закинуть иконку, используемую в GUI?

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

23

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

В exe-файлах можно менять иконки с помощью инструментов для работы с ресурсами (ResHacker или Restorator например). Можно и программно, конечно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

24

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
Дело немного в другом, в скрипте в GUI используется изображение (Gui, Add, Picture,, D:\hdd.ico), вот хотелось бы его упаковать в сам exe или нельзя так?

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

25

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Честно говоря, не совсем понял, в чём проблема. Любую иконку можно упаковать в exe.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

26

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Иконка, да, но я о изображении, которое показывается в окне GUI. Т.е. если я его удаляю, в GUI останется просто ссылка D:\Загрузки\disk2.ico

Вот например:

Gui, Add, Text,, Диск (W:) в работе
Gui, Show, Restore w450 h300
Gui, Add, Picture, x0 y0 h350 w450, D:\Загрузки\disk2.ico
return ; Окончание секции авто-выполнения. Скрипт ожидает каких-нибудь действий пользователя.

GuiClose:
ExitApp
OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

27

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

В смысле, вопрос в том, можно ли показывать иконку из exe, как картинку?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

28

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Нет, вопрос в том, можно ли упаковать дополнительные ресурсы (в данном случае изображение) в exe, чтобы была полноценная портативность. Хотя ответ на Ваш вопрос тоже бы хотелось услышать.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

29

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Так я же уже отвечал, что можно. На мой вопрос — тоже можно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

30

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

А как? Я думал в самом коде нужно прописать вместо D:\Загрузки\disk2.ico, какой-то переменный путь? Или ResHacker-ом добавить?

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

31

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Для начала, я никак не могу понять, о каком изображении идёт речь, об иконке, или каком-то другом типе. В каждом случае образ действий будет разный, с иконкой проще.
Иконка, добавляемая в файл, имеет порядковый номер, нужно его заранее прикинуть и прописать в коде, потом уже добавить ResHacker'ом.
Например, в AutoHotkey.exe есть в ресурсах пять файлов с иконками. Чтобы показать любую из них в качестве картинки, нужно просто указать её номер:

Gui, Add, Pic, Icon1, % A_AhkPath
Gui, Show, w200 h100

Если мы добавим туда ещё иконку, её номер будет 6.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

32

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Waveshaper пишет:

Я думал в самом коде нужно прописать вместо D:\Загрузки\disk2.ico

Путь в данном случае будет A_ScriptFullPath — путь к файлу самого скрипта.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

33

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
Спасибо, я не учёл, что для разных типов графики есть отличия, попробую поэкспериментировать.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).

34

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

Также есть команда FileInstall, при использовании которой во время компиляции добавляется в ресурсы указанный файл, а при запуске скомпилированного файла распаковывается из ресурсов в указанную директорию.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

35

Re: AHK: Изменение иконки окна GUI на панели задач (не в трее)

teadrinker
Спасибо, это то, что нужно, действительно удобней так.

OS: Win8.1x64, AutoHotkey v1.1.21.03 (Unicode 64-bit).