Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Где я в хуке накосячил??   Найти похожие ветки 

 
@!!ex ©   (2010-04-16 20:41) [0]

library hookLib;
uses
 windows,messages,dialogs;
var
 H : THandle;

function hook(c0de, wParam, lParam : integer): Lresult; stdcall;
var
 w : THandle;
begin
 if c0de >= 0 then begin
   if wParam=WM_LBUTTONUP then begin

     W:= FindWindow("TViewerForm", nil);
     PostMessage(W,WM_USER+125,PPoint(lParam).x,PPoint(lParam).y);
   end;
 end;
 {Вызываем следующую ловушку в цепочке ловушек Windows и выходим из процедуры}
 result := CallNextHookEx(H, c0de, wParam, lParam);
End;

procedure sethook; stdcall;
begin
 H:= SetWindowsHookEx(WH_MOUSE, @hook, hInstance, 0);
 if H = 0 then
   messagebox(0,"Ошибка установки хука","ERROR",mb_iconhand);
end;

procedure removehook; stdcall;
begin
 UnhookWindowsHookEx(H);
end;

exports
 sethook, removehook;
end.


Form:OnCreate
sethook();

Fonr:OnDestroy
removehook();

У меня подыхает эксплорер при попытке что нибудь с ним сделать после закрытия моей программы.


 
Игорь Шевченко ©   (2010-04-16 21:34) [1]


> ,dialogs


здесь ?


 
Игорь Шевченко ©   (2010-04-16 21:35) [2]


> procedure sethook; stdcall;
> begin
>  H:= SetWindowsHookEx(WH_MOUSE, @hook, hInstance, 0);
>  if H = 0 then
>    messagebox(0,"Ошибка установки хука","ERROR",mb_iconhand);
>
> end;
>
> procedure removehook; stdcall;
> begin
>  UnhookWindowsHookEx(H);
> end;


За это надо руки отрывать. Не процедуры, а функции, возвращающие успех/неудачу


 
oxffff ©   (2010-04-16 21:36) [3]

Нужно нормально высыпаться.


 
turbouser ©   (2010-04-16 21:38) [4]


> @!!ex ©   (16.04.10 20:41)  

1) c0de - зачем так обзывать переменные?
2) if H = 0 then... есть invalidhandle, если чо..
3) W:= FindWindow("TViewerForm", nil); PostMessage(W,... а w чему равно? Пушкин проверять будет?
4)...


 
@!!ex ©   (2010-04-16 21:45) [5]

КОд вот вотсюда, почти без изменения
http://www.delphisources.ru/pages/faq/base/set_hook.html

Не правил, чтобы ошибок не наделать. Рефакторить его буду когда все зарабюотает.


 
@!!ex ©   (2010-04-16 21:48) [6]

> [1] Игорь Шевченко ©   (16.04.10 21:34)
> здесь ?

Действительно глупость.
Скорее всего именно это и является проблемой. Проверю.


> [2] Игорь Шевченко ©   (16.04.10 21:35)
> За это надо руки отрывать. Не процедуры, а функции, возвращающие
> успех/неудачу

К счастью это не мой код. :)

> [3] oxffff ©   (16.04.10 21:36)
> Нужно нормально высыпаться.

:D


> [4] turbouser ©   (16.04.10 21:38)
> 1) c0de - зачем так обзывать переменные?

Х.з.


> [4] turbouser ©   (16.04.10 21:38)
> 2) if H = 0 then... есть invalidhandle, если чо..

В предыдущем сообщении написал.


> [4] turbouser ©   (16.04.10 21:38)
> 3) W:= FindWindow("TViewerForm", nil); PostMessage(W,...
> а w чему равно? Пушкин проверять будет?

А зачем в данном случае проверять?


 
@!!ex ©   (2010-04-16 21:53) [7]

library hookLib;
uses
 Windows,Messages;
var
 HookHandle: THandle;

const
 WM_MOUSEHOOK = WM_USER+125;

function Hook(Code, wParam, lParam : integer): lResult; stdcall;
var
 Window : THandle;
begin
 if Code >= 0 then begin
   if wParam=WM_LBUTTONUP then begin

     Window:= FindWindow("TViewerForm", nil);
     if Window<>0 then
       PostMessage(Window,WM_MOUSEHOOK,PPoint(lParam).x,PPoint(lParam).y);
   end;
 end;
 result := CallNextHookEx(HookHandle, Code, wParam, lParam);
End;

Function SetHook:boolean; stdcall;
begin
 HookHandle:=SetWindowsHookEx(WH_MOUSE, @Hook, hInstance, 0);
 Result:=HookHandle<>0;
end;

function RemoveHook:boolean; stdcall;
begin
 Result:=UnhookWindowsHookEx(HookHandle);
end;

exports
 SetHook, RemoveHook;
end.


Так лучше?


 
@!!ex ©   (2010-04-16 21:55) [8]

Перестало вылетать.
Спасибо за помощь.
Про кучу гадости которую за собой тащит Dialogs - я не подумал...


 
Игорь Шевченко ©   (2010-04-16 22:16) [9]


> Про кучу гадости которую за собой тащит Dialogs - я не подумал.
> ..


Dialogs тащит Forms.Initialization со всеми вытекающими.


 
Leonid Troyanovsky ©   (2010-04-17 10:56) [10]


> @!!ex ©   (16.04.10 21:53) [7]

>  result := CallNextHookEx(HookHandle, Code, wParam, lParam);
..
> Так лучше?

CallNextHookEx(0,

В 9х оно работать, все равно, не будет, бо HookHandle локален.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.055 c
2-1273824908
Игорек
2010-05-14 12:15
2010.08.27
Как лучше работать с файлом размером больше 100мб


15-1270413005
Юрий
2010-04-05 00:30
2010.08.27
С днем рождения ! 5 апреля 2010 понедельник


15-1270197774
12
2010-04-02 12:42
2010.08.27
Тоже про природу. Объясните феномен.


15-1268677017
AntonioBanderas
2010-03-15 21:16
2010.08.27
из prn в rtf


2-1273713319
DROWSY
2010-05-13 05:15
2010.08.27
Обработка в приложении исключения, вызываемого в триггере.