Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.07.21;
Скачать: [xml.tar.bz2];

Вниз

systray   Найти похожие ветки 

 
Frankenstein   (2003-05-14 12:58) [0]

Как мне разместить несколько иконок, не разрывая их, в системном трее ВМЕСТО ЧАСОВ, как это сделано в Chameleon Clock (www.softshape.com)? Пишу свою программу для похожих целей, но с другим интерфейсом и сервисом.


 
DVM   (2003-05-14 13:02) [1]

Может лучше перехватывать WM_PAINT часов и рисовать там свое? Или просто накрыть часы своим окном.


 
Frankenstein   (2003-05-14 15:21) [2]

Можно и WM_PAINT, но как при этом обеспечить нужную ширину и неразрывность? А также корректную работу при большой высоте таскбара?


 
Snap   (2003-05-14 15:24) [3]

К слову - а сами часы- это одно окно или часть окна таскбара?


 
DVM   (2003-05-14 15:36) [4]

Часы - оконный элемент управления. Метка, или как он там, StaticText.

> Можно и WM_PAINT, но как при этом обеспечить нужную ширину
> и неразрывность? А также корректную работу при большой высоте
> таскбара?

Ну можно же узнать размеры окна. Можно. Можно узнать и размеры той области где часы.


 
Frankenstein   (2003-05-14 16:00) [5]

Это понятно, а вот как определить Handle?


 
DVM   (2003-05-14 16:01) [6]

FindWindow и иже с ними


 
AlexandrRya   (2003-05-17 23:49) [7]

Когда-то для себя я писал регулятор громкости, который по виду напоминал ручку-крутилку. Только крутить ее можно было прямо в трее. То есть просто перетаскиваем ползунок по дуге (как TrackBar, только по окружности). Для этого пришлось внедриться в процесс Explorer"a(если стоит другой шелл, то необходимо внедряться в него, предварительно определив PID по тому, кто породил окно Shell_TrayWnd). Дальше все просто: создаем окно, дочернее окну трея, обрабатываем все сообщения которые нужно. Только вот трей пытается все время подогнать свой размер так, будто нашего окна нет. Для преодоления этого необходимо перехватить функцию окна трея и обрабатывать сообщения изменения размеров. Все.


 
Nick Denry   (2003-05-18 14:26) [8]

2>AlexandrRya
> Для преодоления этого необходимо перехватить функцию окна
> трея и обрабатывать сообщения изменения размеров. Все.

а можно поподробнее?


 
Frankenstein   (2003-05-19 11:29) [9]

А пример можно?


 
AlexandrRya   (2003-05-19 22:24) [10]

Вот кусок примера, только на Си:
Внедрение в процесс происходит следующим образом:
Программа VolumeControl (1) ставит hook в системе, в качестве библиотеки с функцией ловушки использую VCLoader (2).
После этого (1) посылает сообщение окну таскбара. Это сообщение обрабатывает наша процедура из (2) при этом (2) находится в адресном пространстве експлорера. В этот (2) делеает LadLibrary(...) для библиотеки VCMain(3). (3) в свою очередь создает нитку и все остальноепроделывает в ней. Как только нить создана (3) каким либо образом уведомляет (1), что все сделано и (1) снимает ловушку, удаляя из адресного пространства других приложений (2). А в нити создается окно, которое и делает все, что нам нужно.
Теперь как перехватывается функция родительского окна. Тут все просто и стандартно. Для начала узнаем адрес текущей функции окна:

lpOldParentProc = (PVOID)GetWindowLong(hParent,GWL_WNDPROC);

А потом заменяем его на нашу:

SetWindowLong(hParent,GWL_WNDPROC,(LONG)ParentProc);

При этом в ParentProc мы должны будем обращаться к старой lpOldParentProc.
---------
Как вы, наверное, заметили, примеры на Си. Кому надо, могу выслать исходники старой версии. (так как новых нет, не сохранил :[) Все что вам нужно там работает (вроде). Не сделана только прорисовка окна и сама регулировка громкости.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.07.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
11-67743
Fantasist
2002-11-17 08:12
2003.07.21
KOLActiveX


14-67990
copyr25
2003-07-03 21:58
2003.07.21
Просьба ко всем, кто разбирается


14-67977
vopros
2003-07-07 10:42
2003.07.21
Как открыть запороленный архив RAR?


1-67789
Cr@zy-EyE
2003-07-09 12:34
2003.07.21
Как зарегистрировать тип файла?


14-68056
_Alex_
2003-07-03 21:03
2003.07.21
Delphi 7 и TServerSocket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский