Показать сообщение отдельно
  #4  
Старый 26.04.2011, 14:47
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

простейший пример:
Код:
library Hook;

uses Windows, Messages;

type
  PGlobalData = ^TGlobalData;
  TGlobalData = record
    TargetWnd: HWND;
    MessageWnd: Cardinal;
  end;

const
  FileMappingName: PChar = 'Creates_or_opens_a_named_or_unnamed_file_mapping_object';

var
  FileMappingHandle: THandle;
  GlobalData: PGlobalData = nil;

  hCallWndProc: HHOOK = 0;

function CallWndProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  if nCode=HC_ACTION then
    PostMessage(GlobalData^.TargetWnd, GlobalData^.MessageWnd, wParam, lParam);
  Result:=CallNextHookEx(0, nCode, wParam, lParam);
end;

procedure SetHook(ATargetWnd: HWND; AMessageWnd: Cardinal);
begin
  GlobalData^.TargetWnd:=ATargetWnd;
  GlobalData^.MessageWnd:=AMessageWnd;
  hCallWndProc:=SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, HInstance, 0);
end;

procedure UnSetHook();
begin
  UnhookWindowsHookEx(hCallWndProc);
  GlobalData^.MessageWnd:=0;
  GlobalData^.TargetWnd:=0;
end;

exports SetHook, UnSetHook;

procedure DLLHandler(Reason: Integer);
begin
  case Reason of
    DLL_PROCESS_ATTACH: begin
      FileMappingHandle:=CreateFileMapping($ffffffff, nil, PAGE_READWRITE, 0, SizeOf(TGlobalData), FileMappingName);
      GlobalData:=MapViewOfFile(FileMappingHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalData));
    end;
    DLL_PROCESS_DETACH: begin
      UnmapViewOfFile(GlobalData);
      CloseHandle(FileMappingHandle);
    end;
  end;
end;

begin
  DllProc:=@DLLHandler;
  DLLHandler(DLL_PROCESS_ATTACH);
end.
из exe вызываешь SetHook(ATargetWnd: HWND; AMessageWnd: Cardinal); для установки хука и UnSetHook(); для снятия.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием