IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Позиция Notify icon в System Tray (https://www.imho.ws/showthread.php?t=66928)

Кошка 24.08.2004 23:07

Позиция Notify icon в System Tray
 
Kто нибудь знает как нати позицию Notify icon в System tray.

Мне нужно поместить окно похожее на Baloon window рядом с иконкой
в System Tray.

Baloon window которое дает стандартная функция Shell_NotifyIcon не подходит.

заранее спасибо за помощь.

Gem Single 24.08.2004 23:42

Документированных способов нет.

Можно сделать, например, только под 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'а, так что мороки ещё больше.

Кошка 26.08.2004 22:33

Спасибо за помощь ,но что значит для Explorer'a?
какой Explorer ты имеешь ввиду?

Gem Single 26.08.2004 23:50

Который explorer.exe -- это оболочка. Панель задач и рабочий стол создаются им. System tray тоже.
:cool:

Приведённый способ -- недокументированный, explorer так инфу об иконках в tray для себя хранит. Как будет хранить другая оболочка, напр., Aston -- это её личное дело.

Кошка 27.08.2004 09:17

Cпасибо, вполне подходит.
программа не для частных ползователей, а для организаций.

Я думала что есть решение попроще, про то которое ты описал я предполагала. Исползуя Spy я узнала об этом способе.
ты обсолятно прав, это действительно головная боль, но если нет ничего проще, придется исползовать этот. :(

Scary Zet 28.08.2004 20:26

>Короче, создаёшь иконку, находишь tray notify window...

А как найти его? Через FindWindow()?

Gem Single 30.08.2004 12:00

Примерно так:

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.