![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Всем привет!
Хотелось бы узнать как реализовать такое: Есть какая-то программа (например: Skype 4.2, Media Player Classic), нужно сделать так чтобы ее значок из панели задач перемещался в трей, но окно оставалось активным (так как это делает QIP). Смотрел вот ЭТУ статейку, но ничего подходящего не нашел Подскажите кто что знает!!!Последний раз редактировалось Danik007, 27.01.2010 в 00:29. |
|
#2
|
||||
|
||||
|
Неужели это не возможно?
Уважаемый форумчани помогите! Очень интересно как это реализовать!!! |
|
#3
|
|||
|
|||
|
Ну, что это возможно - это точно. Сам никогда не делал, но идея есть.
Ты должен: 1. Хукнуть окно программы 2. При его сворачивании установить ему невидимость (SW_HIDE, если ты что-нить понимаешь) 3. Вывесить иконку в трее (иконку взять у исполняемого модуля программы) 4. При клике на иконку восстановить видимость окна (SW_SHOW). Ну как-то так. |
|
#4
|
||||
|
||||
|
Алгоритм я знаю
![]() Я получаю дескриптор окна, использую SW_HIDE и делаю все (почти все) как вы написали. Но у меня есть проблема, я не могу переместить в трей прикладную программу. Есть пара исходнико, но не знаю как в них добавить обращение к проге(получение дескриптора). Если у кого есть материалы по теме поделитесь пожалуйста. P.S. Что значить - "Хукнуть"? Последний раз редактировалось Danik007, 27.01.2010 в 00:30. |
|
#5
|
|||
|
|||
|
Ну получит хендл окна способов много. Ну к примеру используй Find Window. А хук ето перехватчик. Эт те надо в faq там найдеш ответ.
|
|
#6
|
||||
|
||||
|
Использую NOTIFYICONDATA, но не знаю как получить дескриптор иконки.
Вот пример структуры NOTIFYICONDATA: Код:
with TrayIconData do
begin
cbSize := SizeOf(TrayIconData); //размер иконки. ну тут и не надо что-то менять
Wnd := FindWindow('Notepad', nil); // дескриптор окна, для примера взял блокнот
uID := 0;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_ICONTRAY; //понятия не имею что это. Если не сложно подскажите, на этом месте при компиляции ошибка.
hIcon := ТУТ ДОЛЖЕН БЫТЬ ХЕНД ИКОНКИ :( ;
StrPCopy(szTip, 'Свернутый в трей блокнот 0_о'); //текст для ToolTip'а
end;
Shell_NotifyIcon(NIM_ADD, @TrayIconData);Вот вроде и описал, пока хотелось бы разобраться хотябы с этим! Сам не справлюсь нужна помощь и я очень на нее надеюсь. Всем откликнувшимся спасибо!!! |
|
#7
|
||||
|
||||
|
В общем более-менее разобрался. Только я не знаю как сделать так, чтобы программа НЕ отображалась на панели задач, но отображалась на рабочем столе.
Это код добавления иконки блокнота в трей: Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
HTD:=FindWindow('Notepad', nil);
IC:=GetClassLong(HTD ,GCL_HICON); //Пытаемся достать
with TrayIconData do
begin
cbSize := SizeOf(TrayIconData);
Wnd := HTD;
uID := 0;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_ICONTRAY;
hIcon := IC;
StrPCopy(szTip, 'In Tray');
end;
Shell_NotifyIcon(NIM_ADD, @TrayIconData);
end;Код:
begin ShowWindow(HTD, SW_HIDE); SetWindowLong(HTD, GWL_EXSTYLE, GetWindowLong(HTD, GWL_EXSTYLE) or WS_EX_TOOLWINDOW); ShowWindow(HTD, SW_SHOW); end; Последний раз редактировалось Danik007, 28.01.2010 в 16:49. |
|
#8
|
|||
|
|||
|
Вообще-то ShowWindow(HTD, SW_HIDE); и ShowWindow(HTD, SW_SHOW); достаточно чтобы скрыть и показать окно.
|
|
#9
|
||||
|
||||
|
2 Ama
Спасибо, но я это знаю и хочу добиться другого результата нежели просто скрыть всю программу(и кнопку, и окно), я об этом писал в предыдущем сообщение: Цитата:
Есть еще варианты с использованием TB_HIDEBUTTON (TB_DELETEBUTTON)... Но я не знаю как этим воспользоваться Народ помогите, я уже отчаялся! |
|
#10
|
|||
|
|||
|
А если использовать setwindowlong(handle, gwl_exstyle, getwindowlong(handle, gwl_exstyle) or ws_ex_toolwindow) где-то так. Просто ща без компа
|
|
#11
|
||||
|
||||
|
2 Ama
Это у вас такие приколы? Посмотрите на сообщение №7 в этой теме! |
|
#12
|
|||
|
|||
|
Sorry недоглядел.
|