Главная страница
    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.091 c
2-1270715878
Дмитрий Жуков
2010-04-08 12:37
2010.08.27
"Строки"


15-1265835502
Petr V. Abramov
2010-02-10 23:58
2010.08.27
реклама в инете


15-1268860322
dodo
2010-03-18 00:12
2010.08.27
Посоветуйте модуль или компонент для шифрования данных.


15-1266493598
icWasya
2010-02-18 14:46
2010.08.27
Кодировка


2-1271226026
smman
2010-04-14 10:20
2010.08.27
Как двумерному массиву присвоить элементы одномерного?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский