Текущий архив: 2008.04.27;
Скачать: CL | DM;
Вниз
Hook WH_SHELL Найти похожие ветки
← →
Deeman (2007-08-27 10:56) [0]Здравствуйте. Ставлю хук, все работает хорошо, но хук не реагирует на касперского. Как можно отловить закрытие/появление окна касперского?
← →
SLoW.AlfaMoon.Com (2007-08-27 11:18) [1]никак если вы не член его семьи ;)
← →
Deeman (2007-08-27 13:15) [2]А как же тогда оболочка Windows"а узнает,что он запускается?
← →
Сергей М. © (2007-08-27 13:16) [3]
> Deeman (27.08.07 13:15) [2]
А что такое "окно касперского" ?
← →
clickmaker © (2007-08-27 13:28) [4]
> А как же тогда оболочка Windows"а узнает
а что она при этом делает?
← →
Сергей М. © (2007-08-27 13:30) [5]
> что она при этом делает?
Подпрыгивает от искренней и неподдельной радости ?)
← →
MultIfleX (2007-08-28 09:13) [6]Можешь по таймеру FindWindow и isWindosVisible использовать. щас посмотрел, вроде должно работать, класс "AVP.MainWindow" (у кис 7.0), у сервиса окон нету.
← →
Deeman (2007-08-28 12:24) [7]При появлении окна касперского на панели задач появляется кнопка. Можно как-либо узнать о его появлении без таймера и поиска всех окон? Кто-нибудь знает как оболочка (explorer) узнает, что окно появилось и что надо создать для него кнопку?
← →
Сергей М. © (2007-08-28 12:35) [8]
> Deeman (28.08.07 12:24) [7]
А можно полюбопытствовать, за каким лешим тебе понадобилось ловить это окно ?)
← →
clickmaker © (2007-08-28 12:51) [9]
> Кто-нибудь знает как оболочка (explorer) узнает, что окно
> появилось
вызвали CreateWindow со стилем WS_EX_APPWINDOW, а потом ShowWindow
← →
Deeman (2007-08-28 13:06) [10]
>
> А можно полюбопытствовать, за каким лешим тебе понадобилось
> ловить это окно ?)
Мне нужно ловить все окна, но это оказалось самое не простое.
← →
Deeman (2007-08-28 13:07) [11]
> вызвали CreateWindow со стилем WS_EX_APPWINDOW, а потом
> ShowWindow
И что? А оболчка как об этом узнала? Какое сообщение ей послала прога?
← →
Deeman (2007-08-28 13:08) [12]
> Можешь по таймеру FindWindow и isWindosVisible использовать
Сделал так. Все хорошо. Но некоторые окна дублируются. Как узнать какое из них показано в панели задач?
← →
Сергей М. © (2007-08-28 13:14) [13]
> нужно ловить все окна
За каким лешим ?)
← →
Deeman (2007-08-28 13:34) [14]
> За каким лешим ?)
Хочу создать аналог панели задач
← →
Сергей М. © (2007-08-28 13:41) [15]
> Хочу создать аналог панели задач
Зачем писать "аналог" ?
← →
Deeman (2007-08-28 13:45) [16]Ну захотелось. Мало ли какие желания бывают.
← →
Сергей М. © (2007-08-28 13:55) [17]Ну тады перехватывай глобально вызовы ф-ций CreateWindow[Ex], ShowWindow - думаю, тебе этого будет достаточно.
← →
Deeman (2007-08-28 19:19) [18]
> Ну тады перехватывай глобально вызовы ф-ций CreateWindow[Ex],
> ShowWindow - думаю, тебе этого будет достаточно.
Слишком жестоко. Лучше бы подсказали как разобраться с дубликатами. Как отличить главную форму программы от самой программы, а то они на isWindosVisible отвечают true и оба попадают в список окон.
← →
DVM © (2007-08-28 22:39) [19]Не надо никаких перехватов 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;
← →
DVM © (2007-08-28 22:53) [20]
> Deeman
вот я когда то делал шеллозаменитель http://dvmuratov.narod.ru/myshell.zip (без исходников) проверь ловит ли окна касперского. Пароль там если что 3141592653
← →
Deeman (2007-08-29 10:34) [21]
> вот я когда то делал шеллозаменитель http://dvmuratov.narod.
> ru/myshell.zip (без исходников) проверь ловит ли окна касперского.
> Пароль там если что 3141592653
>
Кнопка появляется, но в отличие от других как-то тормознуто. А вот значка касперского в трее нет.
А вообще у меня к тебе появилось несколько вопросов по поводу этой проги. Очень интересная вещь, но очень сырая. Можешь мне помочь? Я бы тебе скинул вопросы на e-mail.
← →
DVM © (2007-08-29 11:39) [22]
> Кнопка появляется, но в отличие от других как-то тормознуто.
Специально поставил 6 касперского попробовал - кнопка появляется нормально.
В том, что не появляется иконка касперского в области уведомлений, так в этом виноват сам касперский. Она и после перезапуска эксплорера не появляется. Ты ведь запускал мою программу из самого эксплорера или закрыв оный, не устанавливая мою программу как оболочку - соответственно касперский проигнорировал широковещательное сообщение Taskbar Created и иконку не обновил.
> Очень интересная вещь, но очень сырая
Ну явных багов в ней нет, есть недоделки, но она и не предназначалась для полноценной замены - у нее свое предназначение было в свое время.
> Можешь мне помочь? Я бы тебе скинул вопросы на e-mail
А почему бы не писать в эту ветку? Я форум читаю чаще, чем апочту с того ящика, что в анкете.
← →
Deeman (2007-08-29 12:11) [23]1. У меня Касперский 7. На счет иконки наверное ты прав. Это не так важно.
2. Вопросы у меня разноплановые, с темой никак не связаны. Может конечно наглею, но может дашь исходник?
3. Может через ICQ?
← →
DVM © (2007-08-29 12:20) [24]
> 1. У меня Касперский 7
Роли не играет.
> 2. Вопросы у меня разноплановые, с темой никак не связаны.
Ну хорошо пиши на почту.
> Может конечно наглею, но может дашь исходник?
Я не склонен раздавать исходники, тем более, что в данном случае есть еще и соавтор.
> 3. Может через ICQ?
Лучше почта.
Страницы: 1 вся ветка
Текущий архив: 2008.04.27;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.095 c