|
23.10.2010, 08:12
|
#1
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Работа с треем
Требуется достать из трея (ХР) иконки и работать с ними..
(эмулировать работу трея или как это называется)
Google не помог..
У кого есть какие соображения по данному вопросу? Есть спецы?
__________________
Upd:
Что никто не поможет разобраться?
__________________
Уважай собеседника, а лучше подари ему +
Последний раз редактировалось Trazzy, 24.10.2010 в 08:25.
Причина: (см. upd)
|
(Offline)
|
|
24.10.2010, 05:25
|
#2
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Работа с треем
Пока нашел только это:
Чужие идеи:
Вариант 1:
Можно сделать обёртку над shell32.dll, реализовав нужные мне функции работы с треем самому, а остальные перенаправлять в оригинальную
Вариант 2:
Может просто окно трея себе перекинуть? Делается простой сменой родителя.
Вариант 3:
1. зарегистрировать класс TrayNotifyWnd и создать такое окно.
2. разослать всем окнам сообщение TaskbarCreated, чтобы они перерегистрировались в трее
3. отслеживать сообщение WM_COPYDATA. С его помощью передаются структуры SHELLAPPBARDATA (COPYDATASTRUCT::data — 0) и SHELLTRAYDATA (COPYDATASTRUCT::data — 1).
typedef struct _SHELLTRAYDATA
{
DWORD dwHz;
DWORD dwMessage;
NOTIFYICONDATA nid;
} SHELLTRAYDATA;
|
__________________
Upd:
также имеются сорцы LiteStep, только они написаны на си
__________________
Уважай собеседника, а лучше подари ему +
Последний раз редактировалось Trazzy, 24.10.2010 в 08:29.
Причина: (см. upd)
|
(Offline)
|
|
14.11.2010, 07:18
|
#3
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Работа с треем
Не дождавшись помощи от булки я забил на это дело,
но чуть позже все-таки решил заняться этим вплотную..
(написанием аналога XP'шного таскбара
и это скорее из-за спортивного интереса)..
Вот что мне удалось сделать на данный момент:
- одноразовое считывание иконок *
- реагирование на нажатие левой/правой клавиши мыши
- подмена таскбара
- эмулирование нажатия кнопки "Пуск" **
Пример приложения в архиве.. (делалось на основе "3 варианта")
Поделюсь исходниками с человеком, который поможет довести все это до ума!
** во время выполнения программы не обновляются! (+функция почему-то не корректно работает; отображаются не все значки)
** частичное
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
14.11.2010, 13:11
|
#4
|
Дэвелопер
Регистрация: 21.11.2009
Адрес: Афула
Сообщений: 1,701
Написано 658 полезных сообщений (для 1,963 пользователей)
|
Ответ: Работа с треем
хм. Двойное нажатие не работает. Сразу появилось 3 иконки нода и каждую секунду добавлялась ещё одна. Эмуляция пуска не работает. И самое важное:
Какого хрена после запуска твой трей убирает нативный, а перед закрытием не возвращает обратно?
__________________
kali surgeon
|
(Offline)
|
|
14.11.2010, 23:21
|
#5
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Работа с треем
Проверил на нескольких компах и обнаружил, что программа не всегда правильно себя ведет... ((
Хотя на моем работает нормально ..
2 baton4ik: у тебя ХР? (какой sp?..)
> Двойное нажатие не работает.
Странно, ведь функция DblClick имеется и должна работать..
Особого внимания этому не придавал.. Посмотрим....
> Сразу появилось 3 иконки нода и каждую секунду добавлялась ещё одна.
Такое поведение я заметил у программ, которые регулярно
обновляют свои иконки.. Пока еще думаю как исправить..
> Эмуляция пуска не работает.
Было два варианта как открыть "Пуск"; не лепить же мне 2 кнопки..
Значит попробуем второй!.
> Какого хрена после запуска твой трей убирает нативный, а перед закрытием не возвращает обратно?
Хм.. по идее такого быть не должно....
Каким образом ты закрываешь программу?
// При старте программы вызывается ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_HIDE); // А на кнопке "Выход" и в "FormDestroy" стоит - ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_SHOW); // может стоит попробовать использовать // SW_SHOWNORMAL вместо SW_SHOW ??
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
14.11.2010, 23:24
|
#6
|
Дэвелопер
Регистрация: 21.11.2009
Адрес: Афула
Сообщений: 1,701
Написано 658 полезных сообщений (для 1,963 пользователей)
|
Ответ: Работа с треем
Windows 7. Закрыл по ПКМ->Выход
__________________
kali surgeon
|
(Offline)
|
|
14.11.2010, 23:41
|
#7
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Работа с треем
Пост #3:
Сообщение от 2Fake
...
все-таки решил заняться этим вплотную..
(написанием аналога XP'шного таскбара
...
|
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
15.11.2010, 00:06
|
#8
|
Дэвелопер
Регистрация: 21.11.2009
Адрес: Афула
Сообщений: 1,701
Написано 658 полезных сообщений (для 1,963 пользователей)
|
Ответ: Работа с треем
Я видел. Это не значит, что он не должен работать на 7ке
__________________
kali surgeon
|
(Offline)
|
|
15.11.2010, 01:12
|
#9
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Работа с треем
Помимо своего компьютера (XP-sp3) проверял еще на 2х (XP-sp2, XP-sp3)//
..и на всех из них после закрытия приложения корректно восстанавливался таскбар..
хз почему на семерке не работает..
Не могу о ней ничего сказать, т.к раньше не вникал в тонкости этой оси ..
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
17.11.2010, 09:58
|
#10
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Работа с треем
Повозился еще немного с кодом:
- пофиксена эмуляция нажатия на кнопку "Пуск";
- по двойному клику на часики открывается апплет настроек даты/времени;
- подправлен код, восстанавливающий "нативную" пенель задач после выхода..
(на других системах еще не тестировал)
- добавлено немного оформления;
- исправлено несколько мелких багов..
Со значками трея пока не разбирался, осталось как раньше.
Что на сей раз скажете?
__________________
Уважай собеседника, а лучше подари ему +
Последний раз редактировалось Trazzy, 17.11.2010 в 22:21.
Причина: добавлен скриншот
|
(Offline)
|
|
17.11.2010, 18:57
|
#11
|
Дэвелопер
Регистрация: 21.11.2009
Адрес: Афула
Сообщений: 1,701
Написано 658 полезных сообщений (для 1,963 пользователей)
|
Ответ: Работа с треем
Теперь всё ок. Вот только если открыть контекстное меню элемента с лотке, а потом открыть контекстное меню другого элемента, первое не пропадёт. И они вообще не пропадут, пока ты не выберешь какой-либо пункт в меню.
И дефолтный таскбар, я смотрю, ты вообще не скрываешь. Твой таскбар был легко свёрнут нажатием по "Свернуть все окна", так как фокус поместился на дефолтный таскбар
__________________
kali surgeon
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.11.2010, 20:53
|
#12
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Работа с треем
Сообщение от baton4ik
Теперь всё ок. Вот только если открыть контекстное меню элемента с лотке, а потом открыть контекстное меню другого элемента, первое не пропадёт. И они вообще не пропадут, пока ты не выберешь какой-либо пункт в меню...
|
Да, я знаю. Но уже хоть как-то работает, чем вобще никак.
Плюс ко всему этому отображаются не все значки и некоторые выводят значок программы поместившей иконку вмето самой иконки.
С эмуляцией трея толком еще не разборался. Нет такого человека кто бы помог с этим, а то одному уж слишком напряжно.
Сообщение от baton4ik
... И дефолтный таскбар, я смотрю, ты вообще не скрываешь. Твой таскбар был легко свёрнут нажатием по "Свернуть все окна", так как фокус поместился на дефолтный таскбар
|
Панель задач убирается с экрана способом, который я описал в посте #5
(окно просто скрывается по sw_hide, но остается активным)
__________________
Уважай собеседника, а лучше подари ему +
|
(Offline)
|
|
12.12.2010, 14:12
|
#13
|
Оператор ЭВМ
Регистрация: 08.12.2010
Адрес: Белорусь
Сообщений: 25
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Работа с треем
А не дурно ведь, очень даже! 2Fake, а кодом поделитесь?
По поводу меню есть идея. У меня была похожая проблемма. Его нужно выводить с с помощью примерно такого кода:
SetForegroundWindow(Handle); TrackPopupMenu(PopupMenu1, TPM_LEFTBUTTON, p.x, p.y, 0,Handle, NIL); PostMessage(Handle, WM_NULL, 0, 0);
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.12.2010, 02:16
|
#14
|
Разработчик
Регистрация: 24.11.2008
Адрес: UA
Сообщений: 504
Написано 110 полезных сообщений (для 225 пользователей)
|
Ответ: Работа с треем
Сообщение от fall А не дурно ведь, очень даже! 2Fake, а кодом поделитесь?
стучи в асю, поговорим..
а если мне больше ничего не удастся сделать -
возможно скоро выложу исходник..
UPD:
Сообщение от fall TrackPopupMenu(PopupMenu1, TPM_LEFTBUTTON, p.x, p.y, 0,Handle, NIL);
У меня немного иначе вызывается контекстное меню,
но SetForegroundWindow(Handle); и PostMessage(Handle, WM_NULL, 0, 0); действительно помогли)) Огромное спасибо!
__________________
Уважай собеседника, а лучше подари ему +
Последний раз редактировалось Trazzy, 14.12.2010 в 06:14.
Причина: (см. upd)
|
(Offline)
|
|
14.12.2010, 13:26
|
#15
|
Оператор ЭВМ
Регистрация: 08.12.2010
Адрес: Белорусь
Сообщений: 25
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Работа с треем
>>действительно помогли)) Огромное спасибо!
Пожалуйсто. Впервые я стал полезен кому-то на форуме
Много чего интерестного для этой программы можно почерпнуть из исходников blackbox (bb4win.com). Это панель задач, которая полностью заменяет стандартную. Исходный код открыт, но он собирается на CygWin (С++) а не на Delphi...
Подкину идейку. Вашей программе не хватает обрезки WorkArea, ну, чтобы при разворачивании окна других программ не залетали под zTrayBar. Копайте в сторону SPI_SETWORKAREA
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:24.
|