Форум: "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