Показать сообщение отдельно
  #4  
Старый 30.01.2019, 20:29
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Все еще ничего не проходит. Неужели никто не знает?
Код:
SAS;
uses
  System.SysUtils,
  System.Classes,
  Winapi.Windows,
  Winapi.Messages;

{$R *.res}

type
  TMessageHookCallback = procedure(const Msg:TMsg) of object;

var
  HookHandle: Cardinal;
  CallbackProc: TMessageHookCallback;

function GetMsgProc(code: integer; wParam: WPARAM; lParam: LPARAM): LResult;
  stdcall;
begin
  if (code = HC_ACTION) and Assigned(CallbackProc) then  // Тут бываем
    if PMsg(lParam)^.message = WM_WINDOWPOSCHANGING then // и тут
      CallbackProc(PMsg(lParam)^); // а тут нет...

  Result := CallNextHookEx(HookHandle, Code, wParam, lParam);
end;

procedure DisableMessageHook;
  stdcall;
begin
  CallbackProc := nil;

  if HookHandle <> 0 then
  begin
    UnhookWindowsHookEx(HookHandle);
    HookHandle := 0;
  end;
end;

procedure EnableMessageHook(ACallbackProc: TMessageHookCallback);
  stdcall;
begin
  DisableMessageHook;

  CallbackProc := ACallbackProc;
  HookHandle := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, hInstance, 0);
  if HookHandle = 0 then
    RaiseLastOsError;
end;

exports
  GetMsgProc,
  EnableMessageHook,
  DisableMessageHook;

end.
Ответить с цитированием