![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Hook
Kirill45 © (2002-12-13 01:49:00)Доброго времени суток мастера!
Вот столкнулся с проблемой - когда надо перехватить
закрытие окна другой программы - подскажите пожалуйста
как это, хотя бы в принципе делается - надо Hook ставить
или можно как-то через Message можно сообщение поймать.
Kirill45 (2002-12-13 11:16:00) [1]Спасибо за внимание!
информацию по Hook-ам я собрал - разобрался
в общем то вопрос был в способах (методах)
как это можно сделать (если можно) кроме как через Нооk
(тут у меня чисто теоретическая проблема)
Song (2002-12-13 09:03:00) [2]На этом сайте есть статья "Хуки. Аспекты реализации". Почитай, разберись.
Kirill45 (2002-12-13 03:32:00) [3]Дайте пожалуйта ссылки на обзорную информацию - ну типа описания проблемы
Ihor Osov'yak (2002-12-13 03:01:00) [4]2 Suntechnic © (13.12.02 02:54)
> Ему не может быть, а ему точно другое надо
:-) я это знаю. Просто попытка подтолкнуть человека ненавязчиво немного самому подумать...
Ihor Osov'yak (2002-12-13 02:58:00) [5]2 Kirill45 (13.12.02 02:39)
Чего то не вьехал... Да, длл... Причем она будет внедренная в адресное пространство другого процесса...
Как организовать взаимодействие с dll, которая внедрена в адресное пространство чужого процесса - это уже другой вопрос...
Способов несколько - от посылки сообщений до файлов, проектируемых в память....
Сории, время познеее, ухожу спать...
Suntechnic (2002-12-13 02:54:00) [6]Kirill45
закрытие окна другойпрограммы
Ihor Osov"yak ©
сорри за навязчивость
HookHandle:=SetWindowsHookEx(WH_CBT,@Kah_hook,0,GetCurrentThreadId); - это только для текущего потока. Вам может быть и по другому надо...
Ему не может быть, а ему точно другое надо. Ключевое слово в вопросе другойпрограммы. Это значит, что Hook ему надо глобальный ставить, а это значит, что последний параметр SetWindowsHookEx должен быть 0 и сам hook должен проживать в отдельной dll.
Kirill45 (13.12.02 02:39)
Вы меня простите пожалуйста - я с такой проблемкой первый раз столкнулся - вот для примеров приведенных нужна еще и dll
(я просто кое чё почитал но не особо въехал)
А ты подробней почитай и "въедь" лучше. Принцип заключается в том, что тебе надо установить глобальный хук. А глобальные хуки, как я уже упоминал, должны проживать в отдельных dll. Возьми любой пример, коих навалом на этом сайте, и постарайся разобраться, ну а если непонятно, то задавай конкретный вопрос.
Kirill45 (2002-12-13 02:39:00) [7]Вы меня простите пожалуйста - я с такой проблемкой первый раз столкнулся - вот для примеров приведенных нужна еще и dll
(я просто кое чё почитал но не особо въехал)
Вы обрисуете принципы - я могу просто из модуля дать Get.. ну или Wait.. - дайте это в принципе, а как написать я сам придумаю
Rouse_ (2002-12-13 02:24:00) [8]> Ihor Osov"yak © (13.12.02 02:16)
Верно, как то не подумал :))
> Kirill45 (13.12.02 02:14)
Ставишь хук на выше приведенные мной и Ihor Osov"yak сообщения и все (и будет Вам счастье :)
Желаю успехов
Kirill45 (2002-12-13 02:24:00) [9]Да я по ищу - ты мне проблемку обрисуй - что надо искать.
А вообще как это ловится - я не прошу примеров - просто
методы - как это делатся
Ihor Osov'yak (2002-12-13 02:24:00) [10]сорри за навязчивость
HookHandle:=SetWindowsHookEx(WH_CBT,@Kah_hook,0, GetCurrentThreadId); - это только для текущего потока. Вам может быть и по другому надо...
Ihor Osov'yak (2002-12-13 02:22:00) [11]const HookHandle: hHook = 0;
function Kah_hook(Code:integer; aWParam:WPARAM; aLParam:LParam):longint; stdcall;
begin
if code <0 then begin
Result := CallNextHookEx(HookHandle, Code, aWParam, aLParam );
Exit;
end;
if Code = HCBT_DESTROYWND then begin
.....
end;
Result:= CallNextHookEx(HookHandle, Code, aWParam, aLParam );
end;
procedure OnHook;
begin
if HookHandle<>0 then exit;
HookHandle:=SetWindowsHookEx(WH_CBT,@Kah_hook,0,GetCurrentThreadId);
end;
procedure OffHook;
begin
if HookHandle=0 then exit;
UnhookWindowsHookEx(HookHandle);
HookHandle:=0;
end;
Ihor Osov'yak (2002-12-13 02:16:00) [12]2 Rouse_ © (13.12.02 01:56)
Имхо не совсем верно. Ибо окошка может проигноровать WM_CLOSE.
Вернее бы было Hook+WH_CBT+HCBT_DESTROYWND
PS 2 Kirill45 - поищи в MSDN или на гугле по этим ключевым словечкам...
Kirill45 (2002-12-13 02:14:00) [13]to Rouse_
Не понял - поподробнее пожалуйста
Rouse_ (2002-12-13 01:56:00) [14]HOOK+WM_CLOSE
Желаю успехов