![]() |
Позиция Notify icon в System Tray
Kто нибудь знает как нати позицию Notify icon в System tray.
Мне нужно поместить окно похожее на Baloon window рядом с иконкой в System Tray. Baloon window которое дает стандартная функция Shell_NotifyIcon не подходит. заранее спасибо за помощь. |
Документированных способов нет.
Можно сделать, например, только под Explorer. Для других оболочек работать не будет. В explorer'е tray -- это обычный тулбар с кнопками, вся информация об иконках хранится в TBBUTTONINFO.lParam кнопки. Это указатель на структуру: typedef struct _TNPRIVICON { HWND hWnd; UINT uID; UINT uCallbackMessage; DWORD dwState; UINT uVersion; HICON hIcon; } TNPRIVICON, *PTNPRIVICON; Короче, создаёшь иконку, находишь tray notify window, посылаешь ему сообщение TB_GETBUTTONINFO последовательно для всех кнопок (TB_BUTTONCOUNT), при этом анализируешь по TNPRIVICON.hWnd, твоя иконка или нет, а потом при помощи TB_GETITEMRECT узнаёшь прямоугольник иконки. Ещё не перехотелось заниматься этим делом? p.s.: Указатель PTNPRIVICON -- в адресном пространстве explorer'а, так что мороки ещё больше. |
Спасибо за помощь ,но что значит для Explorer'a?
какой Explorer ты имеешь ввиду? |
Который explorer.exe -- это оболочка. Панель задач и рабочий стол создаются им. System tray тоже.
:cool: Приведённый способ -- недокументированный, explorer так инфу об иконках в tray для себя хранит. Как будет хранить другая оболочка, напр., Aston -- это её личное дело. |
Cпасибо, вполне подходит.
программа не для частных ползователей, а для организаций. Я думала что есть решение попроще, про то которое ты описал я предполагала. Исползуя Spy я узнала об этом способе. ты обсолятно прав, это действительно головная боль, но если нет ничего проще, придется исползовать этот. :( |
>Короче, создаёшь иконку, находишь tray notify window...
А как найти его? Через FindWindow()? |
Примерно так:
HWND tray, notf, tool; tray = FindWindow("Shell_TrayWnd", NULL); notf = FindWindowEx(tray, NULL, "TrayNotifyWnd", NULL); // Windows XP: notf = FindWindowEx(notf, NULL, "SysPager", NULL); tool = FindWindowEx(notf, NULL, "ToolbarWindow32", NULL); |
| Часовой пояс GMT +4, время: 22:15. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.