
05.11.2010, 12:44
|
Прохожий
|
|
Регистрация: 01.11.2010
Сообщения: 5
Репутация: 10
|
|
после удаления hook вешается ОС
Загружаю ловушку при запуске программы, отрабатывает она нормально, закрываю приложение и по событию OnClose пытаюсь отключить ловушку. Получается что вешается вся ось... где касяк понять не могу, вот текст библиотеки.
Код:
library DynHelp;
uses
ShareMem,
SysUtils,
Classes,
StdCtrls,
AppEvnts,
ComCtrls,
Forms,
Windows,
Controls,
Messages;
var
CMemo: TCustomMemo;
HandleHook: HHOOK = 0;
{$R *.res}
//процедура на ловушку
procedure Hook(Code: integer; wParam: integer; lParam: integer); stdcall;
begin
CallNextHookEx(HandleHook, Code, wParam, lParam);
if Code = HC_ACTION then
if TMSg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
if (TMSg(Pointer(lParam)^).wParam and MK_CONTROL) = MK_CONTROL then
begin
MessageBox(TMSg(Pointer(lParam)^).hwnd, PChar(IntToStr(lParam)),
'!!!', mb_iconhand);
end;
end;
procedure DynHelpConnection(CustomMemo: TCustomMemo; ThreadID: Cardinal);
stdcall; export;
begin
if (CustomMemo.ClassName = 'TMemo') then
begin
CMemo := CustomMemo;
HandleHook := SetWindowsHookEx(WH_GETMESSAGE, @Hook, HInstance, 0);
end;
end;
procedure DynHelpDisconnection; stdcall; export;
begin
UnhookWindowsHookEx(HandleHook);
HandleHook := 0;
CMemo := nil;
end;
exports
DynHelpConnection,
DynHelpDisconnection;
begin
end.
|