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.
[Code Collection] 模拟点击另一窗口的按钮
最新推荐文章于 2026-08-14 16:55:49 发布
本文介绍了一种使用Delphi实现点击其他应用程序中指定按钮的方法。通过查找目标窗口和子控件,发送模拟点击消息,可以实现跨应用操作。文章提供了一个具体的例子,展示了如何设置界面元素并调用相应函数。

2279

被折叠的 条评论
为什么被折叠?



