| imho.ws |
![]() |
|
|
|
# 1 |
|
Guest
Сообщения: n/a
|
Позиция Notify icon в System Tray
Kто нибудь знает как нати позицию Notify icon в System tray.
Мне нужно поместить окно похожее на Baloon window рядом с иконкой в System Tray. Baloon window которое дает стандартная функция Shell_NotifyIcon не подходит. заранее спасибо за помощь. |
|
|
# 2 |
|
Newbie
Регистрация: 21.07.2004
Адрес: Брест
Сообщения: 26
![]() |
Документированных способов нет.
Можно сделать, например, только под 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'а, так что мороки ещё больше. |
|
|
|
|
# 4 |
|
Newbie
Регистрация: 21.07.2004
Адрес: Брест
Сообщения: 26
![]() |
Который explorer.exe -- это оболочка. Панель задач и рабочий стол создаются им. System tray тоже.
![]() Приведённый способ -- недокументированный, explorer так инфу об иконках в tray для себя хранит. Как будет хранить другая оболочка, напр., Aston -- это её личное дело. |
|
|
|
|
# 5 |
|
Guest
Сообщения: n/a
|
Cпасибо, вполне подходит.
программа не для частных ползователей, а для организаций. Я думала что есть решение попроще, про то которое ты описал я предполагала. Исползуя Spy я узнала об этом способе. ты обсолятно прав, это действительно головная боль, но если нет ничего проще, придется исползовать этот.
|
|
|
# 7 |
|
Newbie
Регистрация: 21.07.2004
Адрес: Брест
Сообщения: 26
![]() |
Примерно так:
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);
__________________
Spel chekers, hoo neeeds em?
|
|
|