![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы со снятием ловушки
KygECHuK © (2006-05-10 09:22:00)При снятии ловушки прроиходит ошибка доступа памяти:
library W1N;
uses
Windows,
SySUtils,
Messages,
typeunit;
var
SysHook : HHook = 0;
flag : boolean = true;
Password : word = 0;
Wnd : Hwnd = 0;
procedure GetDLLData(var AGlobalData: pdllldata);stdcall; external 'mapping.dll' name 'GetDLLData';
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; export; stdcall;
var
lpdlldata : pdllldata;
i : dword;
str : String;
begin
getdlldata(lpdlldata);
Result := CallNextHookEx(SysHook, Code, wParam, lParam);
case code of
HCBT_CREATEWND:
begin
Str := TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName;
if TCBTCreateWnd(Pointer(lParam)^).lpcs.hwndParent <> 0 then exit;
if str = '' then exit;
i:=0;
while lpdlldata^.data[i] <> '' do
begin
if lpdlldata.data[i] = str then
begin
try
result:=1;
break
except
end;
end;
Inc(i);
end;
end;
end;
end;
function SetHook(Hook : Boolean) : Boolean; export; stdcall;
begin
Result := false;
if Hook then
begin
if SysHook = 0 then
SysHook := SetWindowsHookEx(WH_CBT{WH_CALLWNDPROC}, @SysMsgProc, HInstance, 0);
Result := (SysHook <> 0);
end else
begin
if SysHook <> 0 then
begin
try
UnhookWindowsHookEx(SysHook);
SysHook := 0;
Result := true;
except
// Ошибка выскакивает вот здесь
end;
end;
end;
end;
exports
SETHOOK index 1;
begin
end.
KygECHuK (2006-05-10 10:07:00) [41]Как это можно осуществить?
Сергей М. (2006-05-10 09:48:00) [42]Переменная SysHook должна быть глобально доступна для всех экземпляров хук-библиотеки.