![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Xук на сообщение WM_SYSCOMMAND:SC_MAXIMIZE
Углук © (2007-07-02 19:02:00)Делаю хук на сообщение WM_SYSCOMMAND:SC_MAXIMIZE/SC_MINIMIZE;
Var SysHook:HHook=0;
Function SysMsgProc(Code:Integer; WParam:LongInt; LParam:LongInt):LongInt; stdcall;
Var Msg:TMessage;
Begin
if Code = HCBT_SYSCOMMAND then
begin
if WParam=SC_MINIMIZE then
SendMessage(FOrm1.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0)
else if WParam=SC_RESTORE then
SendMessage(FOrm1.Handle,WM_SYSCOMMAND,SC_RESTORE,0);
end else CallNextHookEx(SysHook,Code,WParam,LParam);
end;
procedure Hook(Flag:Boolean;dwThreadId:DWORD); export; stdcall;
Begin
IF Flag then SysHook:=SetWindowsHookEx(WH_CBT,@SysMsgProc,HInstance,dwThreadId) Else
Begin
UnhookWindowsHookEx(SysHook);
SysHook:=0;
End;
End;
exports Hook;
Внутри программы выполняется:
dwDestThreadId:DWORD;
HDLL:DWORD;
begin
dwDestThreadId:= GetWindowThreadProcessId(H, nil);
@Hook:=nil;
HDLL:=LoadLibrary(pchar('Look.dll'));
@Hook:=GetProcAddress(HDLL,'Hook');
Hook(True,dwDestThreadId);
После чего целевое приложение, на которое ставится хук, перестает реагировать
на все нажатия мыши, клавиатуры и т.д. Kак решить?
Углук (2007-07-03 16:02:00) [1]Проблема решилась! Спасибо Инсу. Правда, остался один вопрос.
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=53346
Инс (2007-07-03 14:00:00) [2]Вот на Delphikingdom я тебе и написал в чем проблема
Углук (2007-07-03 13:40:00) [3]В общем, благодаря совету Ins'а на Delphikingdom удалось избавиться от блокировки приложения, но...теперь вылазит AV при cовершении сворачивания окна...сейчас посмотрим, в чем дело
Углук (2007-07-03 13:33:00) [4]В статье Алексея Павлова пример не компилируется.
Углук (2007-07-03 13:33:00) [5]То есть компилируется,сорри, но выдает ошибку загрузки DLL
Rouse_ (2007-07-02 22:12:00) [6]Да, еще...
Var SysHook:HHook=0;- это ошибка, читай статью по ловушкам на данном сайте от Алексея Павлова. Он там все разжевал.
Rouse_ (2007-07-02 22:09:00) [7]Ты разрываешь цепочку.
> Kак решить?
Передавать сообщение дальше по цепочке ловушек вызовом CallNextHookEx. Пересмотри логику своей SysMsgProc.