unit Exchange; interface uses Windows; type PHookInfo = ^THookInfo; THookInfo = packed record hDrawWindow: THandle; hHookedWindow: THandle; HookHandle: THandle; DLLsPath: array [0..MAX_PATH - 1] of char; end; var CommonArea: PHookInfo = NIL; implementation var Mapping: THandle = 0; const UniqueHookId = '{8FA5AD09-26EB-43E5-A977-91FCF972D32C}'; UniqueID = '{CE18D4DE-4C07-4F08-B18C-C07C29D3441E}'; initialization Mapping := CreateFileMapping(INVALID_HANDLE_VALUE, NIL, PAGE_READWRITE, 0, SizeOf(CommonArea), UniqueHookId); CommonArea := MapViewOfFile(Mapping, FILE_MAP_ALL_ACCESS, 0, 0, 0); finalization if Assigned(CommonArea) then UnmapViewOfFile(CommonArea); if Mapping <> 0 then CloseHandle(Mapping); end. ......... ........ function UnSetHook: BOOL; begin Result := false; if CommonArea^.HookHandle <> 0 then begin Result := UnhookWindowsHookEx(CommonArea^.HookHandle); if Result then CommonArea^.HookHandle := 0; end; end; ..... .... FillChar(CommonArea^, SizeOf(CommonArea^), 0); tmp := PChar(ExtractFilePath(ParamStr(0))); lstrcpy(CommonArea^.DLLsPath, tmp);