Форум: "Начинающим";
Текущий архив: 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.06 c