imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 24.08.2004, 23:07     # 1
Кошка
Guest
 
Сообщения: n/a

Позиция Notify icon в System Tray

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

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

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

заранее спасибо за помощь.
 
Старый 24.08.2004, 23:42     # 2
Gem Single
Newbie
 
Аватар для Gem Single
 
Регистрация: 21.07.2004
Адрес: Брест
Сообщения: 26

Gem Single Путь к славе только начался
Документированных способов нет.

Можно сделать, например, только под 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'а, так что мороки ещё больше.
Gem Single вне форума  
Старый 26.08.2004, 22:33     # 3
Кошка
Guest
 
Сообщения: n/a

Спасибо за помощь ,но что значит для Explorer'a?
какой Explorer ты имеешь ввиду?
 
Старый 26.08.2004, 23:50     # 4
Gem Single
Newbie
 
Аватар для Gem Single
 
Регистрация: 21.07.2004
Адрес: Брест
Сообщения: 26

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


Приведённый способ -- недокументированный, explorer так инфу об иконках в tray для себя хранит. Как будет хранить другая оболочка, напр., Aston -- это её личное дело.
Gem Single вне форума  
Старый 27.08.2004, 09:17     # 5
Кошка
Guest
 
Сообщения: n/a

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

Я думала что есть решение попроще, про то которое ты описал я предполагала. Исползуя Spy я узнала об этом способе.
ты обсолятно прав, это действительно головная боль, но если нет ничего проще, придется исползовать этот.
 
Старый 28.08.2004, 20:26     # 6
Scary Zet
Junior Member
 
Аватар для Scary Zet
 
Регистрация: 08.07.2004
Адрес: Воронеж
Сообщения: 115

Scary Zet Нимб уже пробиваетсяScary Zet Нимб уже пробивается
>Короче, создаёшь иконку, находишь tray notify window...

А как найти его? Через FindWindow()?
Scary Zet вне форума  
Старый 30.08.2004, 12:00     # 7
Gem Single
Newbie
 
Аватар для Gem Single
 
Регистрация: 21.07.2004
Адрес: Брест
Сообщения: 26

Gem Single Путь к славе только начался
Примерно так:

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?
Gem Single вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 03:13.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.