unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) btnGo: TButton; edtTitle: TEdit; Label1: TLabel; Label2: TLabel; edtBtnCap: TEdit; procedure btnGoClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} type PWndInfo = ^TWndInfo; TWndInfo = record WndCaption: string; WndHandle: THandle; end; function EnumChildWinProc(hChild: THandle; Info: PWndInfo): boolean; stdcall; var szCaption: array [0..MAX_PATH] of char; begin if hChild = 0 then begin Result := false; // stop searching exit; end; GetWindowText(hChild, szCaption, sizeof(szCaption)); { if Info.WndCaption = StrPas(szCaption) then } if Info.WndCaption = string(szCaption) then begin Info.WndHandle := hChild; Result := false; // stop searching end; Result := true; end; function ClickOtherWndButton(WndTitle, BtnCaption: string): boolean; var hWnd: THandle; info: TWndInfo; begin Result := false; info.WndCaption := BtnCaption; info.WndHandle := 0; hWnd := FindWindow(nil, PChar(WndTitle)); if hWnd <> 0 then begin EnumChildWindows(hWnd, @EnumChildWinProc, LParam(@info)); if info.WndHandle <> 0 then begin PostMessage(info.WndHandle, BM_CLICK, 0, 0); Result := true; end; end; end; procedure TForm1.btnGoClick(Sender: TObject); begin if ClickOtherWndButton(edtTitle.Text, edtBtnCap.Text) then Caption := Format('Send %s to %s successfully!', [edtBtnCap.Text, edtTitle.Text]) else MessageDlg('Operation failed!', mtInformation, [mbOK], 0); end; end.