![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Hook WH_SHELL [D7, WinXP]
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]
> что она при этом делает?
Подпрыгивает от искренней и неподдельной радости ?)