Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Hook WH_SHELL [D7, WinXP]


Страницы:   1 2

Deeman ©   (2007-08-27 10:56:00) 

Здравствуйте. Ставлю хук, все работает хорошо, но хук не реагирует на касперского. Как можно отловить закрытие/появление окна касперского?


DVM   (2007-08-29 12:20:00) [1]


> 1. У меня Касперский 7

Роли не играет.


> 2. Вопросы у меня разноплановые, с темой никак не связаны.

Ну хорошо пиши на почту.


> Может конечно наглею, но может дашь исходник?

Я не склонен раздавать исходники, тем более, что в данном случае есть еще и соавтор.


> 3. Может через ICQ?

Лучше почта.


Deeman   (2007-08-29 12:11:00) [2]

1. У меня Касперский 7. На счет иконки наверное ты прав. Это не так важно.
2. Вопросы у меня разноплановые, с темой никак не связаны. Может конечно наглею, но может дашь исходник?
3. Может через ICQ?


DVM   (2007-08-29 11:39:00) [3]


> Кнопка появляется, но в отличие от других как-то тормознуто.

Специально поставил 6 касперского попробовал - кнопка появляется нормально.

В том, что не появляется иконка касперского в области уведомлений, так в этом виноват сам касперский. Она и после перезапуска эксплорера не появляется. Ты ведь запускал мою программу из самого эксплорера или закрыв оный, не устанавливая мою программу как оболочку - соответственно касперский проигнорировал широковещательное сообщение Taskbar Created и иконку не обновил.


> Очень интересная вещь, но очень сырая

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


> Можешь мне помочь? Я бы тебе скинул вопросы на e-mail

А почему бы не писать в эту ветку? Я форум читаю чаще, чем апочту с того ящика, что в анкете.


Deeman   (2007-08-29 10:34:00) [4]


> вот я когда то делал шеллозаменитель http://dvmuratov.narod.
> ru/myshell.zip (без исходников) проверь ловит ли окна касперского.
>  Пароль там если что 3141592653
>


Кнопка появляется, но в отличие от других как-то тормознуто. А вот значка касперского в трее нет.

А вообще у меня к тебе появилось несколько вопросов по поводу этой проги. Очень интересная вещь, но очень сырая. Можешь мне помочь? Я бы тебе скинул вопросы на e-mail.


DVM   (2007-08-28 22:53:00) [5]


> Deeman

вот я когда то делал шеллозаменитель http://dvmuratov.narod.ru/myshell.zip(без исходников) проверь ловит ли окна касперского. Пароль там если что 3141592653


DVM   (2007-08-28 22:39:00) [6]

Не надо никаких перехватов CreateWindow() WH_SHELL окно касперсого прекрасно отлавливает. А вот окна консольных приложений не отлавливает. Для этого есть другой способ.


> Как отличить главную форму программы от самой программы,
>  а то они на isWindosVisible отвечают true и оба попадают
> в список окон.

Я вот так окна фильтровал:


function IsAppWindow(Wnd: HWND): BOOL; stdcall;
var
 Style, ExtStyle: LongInt;
 hOwner, hParent: HWND;
begin
 Result := true;
 if not IsWindow(Wnd) then
   begin
     Result := false;
     exit;
   end;
 Style := GetWindowLong(Wnd, GWL_STYLE);
 ExtStyle := GetWindowLong(Wnd , GWL_EXSTYLE);
 hOwner := GetWindow(Wnd, GW_OWNER);
 hParent := GetParent(Wnd);
 if (Style and WS_CHILD) <> 0 then result := false;
 if (Style and WS_VISIBLE) = 0 then Result := false;
 if not IsWindowVisible(Wnd) then Result := false;
 if (ExtStyle and  WS_EX_TOOLWINDOW) <> 0 then Result := false;
 if (ExtStyle and  WS_EX_MDICHILD) <> 0 then Result := false;

 if (hOwner <> 0) and ((ExtStyle and WS_EX_APPWINDOW) = 0) then result := false;
 if (hOwner <> 0) and Result then Result := not IsAppWindow(hOwner);

 if hParent <> 0 then Result := false;
 if GetWindowLong(Wnd , GWL_USERDATA) = MagicDWord then Result := false;
end; // End of function IsAppWindow;


Deeman   (2007-08-28 19:19:00) [7]


> Ну тады перехватывай глобально вызовы ф-ций CreateWindow[Ex],
>  ShowWindow - думаю, тебе этого будет достаточно.


Слишком жестоко. Лучше бы подсказали как разобраться с дубликатами. Как отличить главную форму программы от самой программы, а то они на isWindosVisible отвечают true и оба попадают в список окон.


Сергей М.   (2007-08-28 13:55:00) [8]

Ну тады перехватывай глобально вызовы ф-ций CreateWindow[Ex], ShowWindow - думаю, тебе этого будет достаточно.


Deeman   (2007-08-28 13:45:00) [9]

Ну захотелось. Мало ли какие желания бывают.


Сергей М.   (2007-08-28 13:41:00) [10]


> Хочу создать аналог панели задач


Зачем писать "аналог" ?


Deeman   (2007-08-28 13:34:00) [11]


> За каким лешим ?)


Хочу создать аналог панели задач


Сергей М.   (2007-08-28 13:14:00) [12]


> нужно ловить все окна


За каким лешим ?)


Deeman   (2007-08-28 13:08:00) [13]


> Можешь по таймеру FindWindow и isWindosVisible использовать


Сделал так. Все хорошо. Но некоторые окна дублируются. Как узнать какое из них показано в панели задач?


Deeman   (2007-08-28 13:07:00) [14]


> вызвали CreateWindow со стилем WS_EX_APPWINDOW, а потом
> ShowWindow


И что? А оболчка как об этом узнала? Какое сообщение ей послала прога?


Deeman   (2007-08-28 13:06:00) [15]


>
> А можно полюбопытствовать, за каким лешим тебе понадобилось
> ловить это окно ?)


Мне нужно ловить все окна, но это оказалось самое не простое.


clickmaker   (2007-08-28 12:51:00) [16]


> Кто-нибудь знает как оболочка (explorer) узнает, что окно
> появилось

вызвали CreateWindow со стилем WS_EX_APPWINDOW, а потом ShowWindow


Сергей М.   (2007-08-28 12:35:00) [17]


> Deeman   (28.08.07 12:24) [7]


А можно полюбопытствовать, за каким лешим тебе понадобилось ловить это окно ?)


Deeman   (2007-08-28 12:24:00) [18]

При появлении окна касперского на панели задач появляется кнопка. Можно как-либо узнать о его появлении без таймера и поиска всех окон? Кто-нибудь знает как оболочка (explorer) узнает, что окно появилось и что надо создать для него кнопку?


MultIfleX   (2007-08-28 09:13:00) [19]

Можешь по таймеру FindWindow и isWindosVisible использовать. щас посмотрел, вроде должно работать, класс "AVP.MainWindow" (у кис 7.0), у сервиса окон нету.


Сергей М.   (2007-08-27 13:30:00) [20]


> что она при этом делает?


Подпрыгивает от искренней и неподдельной радости ?)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо