Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
@!!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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.055 c
2-1274112458
ixen
2010-05-17 20:07
2010.08.27
Маска колонки DBGridEh


15-1273530236
Фд
2010-05-11 02:23
2010.08.27
Привязать домены


15-1264415891
Ega23
2010-01-25 13:38
2010.08.27
Всех Татьян - с Татьяниным Днём!


2-1270059753
Perseus
2010-03-31 22:22
2010.08.27
Алгоритмы и типы


6-1217494301
dime_veyron
2008-07-31 12:51
2010.08.27
Версия Windows через локальную сеть





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский