아래는 제가 말들고자 하는 콤포넌트 소스입니다.
후킹은 되는데 실행되고 나서 폼에 WindowProc를 돌려 줘야 하는데
그게 안됩니다.
아래 방법말고 Destroy에서 돌려줄려고 하니까 에러가 나서 ....
제가 생각하기에는 돌려줘야 한다고 생각하는데
돌려주지를 못합니다.....
고수님들을 조언을 부탁드립니다.
unit TRan;
interface
uses classes, Forms, Windows, Messages, controls;
type
TTran = class(TComponent)
private
FTrnsWndProc: TWndMethod;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MS_Soft', [TTran]);
end;
constructor TTran.Create(AOwner: Tcomponent);
begin
inherited Create(AOwner);
FTrnsWndProc := (Self.Owner as TForm).WindowProc;
(Self.Owner as TForm).WindowProc := RunTrns;
end;
destructor TTran.Destroy;
begin
Destroying;
inherited Destroy;
end;
procedure TTran.RunTrns(var M: TMessage);
begin
if M.Msg = WM_GETMINMAXINFO then
// 이부분에서 특정 작업하기
// 메세지 돌려주기
FTrnsWndProc(M);
// Close 메세지에 WndProc 돌려주기
if M.Msg = WM_CLOSE then
(Self.Owner as TForm).WindowProc := FTrnsWndProc;
end;
end.