1

Тема: AHK: Группируются иконки в трее.

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

http://s01.geekpic.net/di-9L7R2T.png

2

Re: AHK: Группируются иконки в трее.

По-моему, никак.

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

3

Re: AHK: Группируются иконки в трее.

Можно.
https://tweaker.ramensoftware.com/

4

Re: AHK: Группируются иконки в трее.

Если верно понял - нужно править реестр. Только нужно знать какие параметры за группирование отвечают.

Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

5

Re: AHK: Группируются иконки в трее.

Реестр тут не причем.
https://devblogs.microsoft.com/oldnewth … 00/?p=6813

6

Re: AHK: Группируются иконки в трее.

Malcev, там же везде речь идёт о группировании на панели задач, вроде? К иконкам в трее это тоже имеет отношение?

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

7 (изменено: Malcev, 2021-12-28 06:37:14)

Re: AHK: Группируются иконки в трее.

Не, это я спутал трей с панелей задач.
Спасибо за подмечание.
С треем нужно делать как-то так:

I believe the tray icon settings are stored against the executable file path and GUID (if one is specified in the NOTIFYICONDATA struct). To set a GUID (i.e. a different one for each script), you would need to create the icon yourself by filling out the struct and calling Shell_NotifyIcon.

https://www.autohotkey.com/boards/viewt … 672#p91672
Мне проверять (писать код) лениво, но сделать точно можно, так-как, например, HD sentinel не группирует свои иконки.

8

Re: AHK: Группируются иконки в трее.

Да, работает!

#Persistent
#NoTrayIcon

hIcon := LoadPicture("Shell32", "Icon44", IMAGE_ICON := 1)
AddTrayIcon(hIcon, CreateGuid(_))
OnExit("RemoveTrayIcon")

AddTrayIcon(hIcon, pGUID) {
   static NIM_ADD := 0x00000000
        , flags := ( NIF_MESSAGE := 0x00000001 )
                 | ( NIF_ICON    := 0x00000002 )
                 | ( NIF_GUID    := 0x00000020 )
   VarSetCapacity(NOTIFYICONDATA, size := 64, 0)
   NumPut(size         , NOTIFYICONDATA)
   NumPut(A_ScriptHwnd , NOTIFYICONDATA, A_PtrSize)
   NumPut(flags        , NOTIFYICONDATA, A_PtrSize*2 + 4)
   NumPut(nMsg := 0x404, NOTIFYICONDATA, A_PtrSize*2 + 8)
   NumPut(hIcon        , NOTIFYICONDATA, A_PtrSize*3 + 8)
   DllCall("RtlMoveMemory", "Ptr", &NOTIFYICONDATA + size - A_PtrSize - 16, "Ptr", pGUID, "Ptr", 16)
   Return DllCall("Shell32\Shell_NotifyIcon", "UInt", NIM_ADD, "Ptr", &NOTIFYICONDATA)
}

RemoveTrayIcon() {
   static NIM_DELETE := 0x00000002
   VarSetCapacity(NOTIFYICONDATA, size := 16, 0)
   NumPut(size        , NOTIFYICONDATA)
   NumPut(A_ScriptHwnd, NOTIFYICONDATA, A_PtrSize)
   DllCall("Shell32\Shell_NotifyIcon", "UInt", NIM_DELETE, "Ptr", &NOTIFYICONDATA)
}

CreateGuid(ByRef GUID) {
   VarSetCapacity(GUID, 16, 0)
   DllCall("Ole32\CoCreateGuid", "Ptr", &GUID)
   Return &GUID
}

Может появиться среди скрытых.

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