unit UCallHwnd; interface uses 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.