![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Где я в хуке накосячил??
@!!ex © (2010-04-16 20:41:00)
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();
У меня подыхает эксплорер при попытке что нибудь с ним сделать после закрытия моей программы.
Leonid Troyanovsky (2010-04-17 10:56:00) [1]
> @!!ex © (16.04.10 21:53) [7]
> result := CallNextHookEx(HookHandle, Code, wParam, lParam);
..
> Так лучше?
CallNextHookEx(0,
В 9х оно работать, все равно, не будет, бо HookHandle локален.
--
Regards, LVT.
Игорь Шевченко (2010-04-16 22:16:00) [2]
> Про кучу гадости которую за собой тащит Dialogs - я не подумал.
> ..
Dialogs тащит Forms.Initialization со всеми вытекающими.
@!!ex (2010-04-16 21:55:00) [3]Перестало вылетать.
Спасибо за помощь.
Про кучу гадости которую за собой тащит Dialogs - я не подумал...
@!!ex (2010-04-16 21:53:00) [4]
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:48:00) [5]> [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:45:00) [6]КОд вот вотсюда, почти без изменения
http://www.delphisources.ru/pages/faq/base/set_hook.html
Не правил, чтобы ошибок не наделать. Рефакторить его буду когда все зарабюотает.
turbouser (2010-04-16 21:38:00) [7]
> @!!ex © (16.04.10 20:41)
1)c0de- зачем так обзывать переменные?
2)if H = 0 then...есть invalidhandle, если чо..
3)W:= FindWindow('TViewerForm', nil); PostMessage(W,...а w чему равно? Пушкин проверять будет?
4)...
oxffff (2010-04-16 21:36:00) [8]Нужно нормально высыпаться.
Игорь Шевченко (2010-04-16 21:35:00) [9]
> 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;
За это надо руки отрывать. Не процедуры, а функции, возвращающие успех/неудачу
Игорь Шевченко (2010-04-16 21:34:00) [10]
> ,dialogs
здесь ?