procedure
TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//フック終了
SetWindowLong(Form1.Handle,GWL_WNDPROC,Longint(FAddress));
FreeObjectInstance(FHookWndProc);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//フック開始
FHookWndProc := MakeObjectInstance(HookWndProc);
FAddress :=Pointer(SetWindowLong(Form1.Handle, GWL_WNDPROC, Longint(FHookWndProc
))) ;
end;
{メッセージを捕まえる}
procedure TForm1.HookWndProc( var Msg:TMessage );
begin
case Msg.Msg of
WM_SIZE : ShowMessage('ウインドウのサイズが変更した。');
WM_MOVE : ShowMessage('ウインドウが移動した') ;
WM_CLOSE : ShowMessage('終了すんのはやくない?');
end;
With Msg do
begin
//メッセージを横流しする(重要)
Result := CallWindowProc(FAddress ,Handle,Msg,WParam,LParam );
end;
end; |