Главная страница
    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.065 c
2-1270896885
yagluboko
2010-04-10 14:54
2010.08.27
Удаление элемента из списка


2-1266580325
NovichoK111
2010-02-19 14:52
2010.08.27
TreeView


6-1224492954
Mephala
2008-10-20 12:55
2010.08.27
Сформировать soap-сообщение с base64binary


2-1271699684
SyrBrandon
2010-04-19 21:54
2010.08.27
Как сделать чтобы в объекте TEdit вводились тока латинские буквы


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