unit UCallHwnd;interfaceuses Classes, Messages, Windows;const WM_USER_MSG = WM_USER + 1;type TCallHwnd = class(TObject) private FHwnd: THandle; protected procedure DoUserMessage(var AMsg: TMessage); public constructor Create; destructor Destroy; override; //调用测试 function CallHwndTest: Boolean; end;implementation{ TCallHwnd }function TCallHwnd.CallHwndTest: Boolean;begin Result := PostMessage(FHwnd, WM_USER_MSG, 1, 2)end;constructor TCallHwnd.Create;begin FHwnd := AllocateHWnd(DoUserMessage);end;destructor TCallHwnd.Destroy;begin DeallocateHWnd(FHwnd); inherited;end;procedure TCallHwnd.DoUserMessage(var AMsg: TMessage);begin if AMsg.Msg = WM_USER_MSG then begin //AMsg.LParam 2 //AMsg.WParam 1 //do something end else AMsg.Result := DefWindowProc(FHwnd, AMsg.Msg, AMsg.WPARAM, AMsg.LPARAM);end;end.