function EnumChildProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
vBuffer: array[0..255] of Char;
begin
GetClassName(hwnd, vBuffer, 255);
if SameText(vBuffer, 'TButton') or SameText(vBuffer, 'Button') then begin
Inc(vIndex);
if vIndex = cIndex then begin
SendMessage(hwnd, WM_LBUTTONDOWN, 0, 0); //按下
SendMessage(hwnd, WM_LBUTTONUP, 0, 0); //放开
Result := False;
Exit;
end;
end;
Result := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
vHandle: THandle;
begin
vHandle := FindWindow('TFormZswangTest', nil); //寻找窗体句柄~~
if vHandle <= 0 then Exit;
vIndex := 0;
EnumChildWindows(vHandle, @EnumChildProc, 0); //遍历子窗体~~
end;
function GetButtonHandle(hwnd: Integer; lparam: Longint):Boolean;
var
buffer: array[0..255] of Char;
buffer1: array[0..255] of Char;
begin
Result := True;
GetClassName(hwnd,buffer,256);//找目标窗口控件
if StrPas(Buffer)='Button' then//找到发消息的目标窗口控件
begin
GetWindowText(hwnd,buffer1,100);
if buffer1 = '保存(&S)' then
begin
PInteger(lparam)^ := hwnd; //目标窗口,目标控件
Result:=False; //ÖÕֹѻ·
end;
end;
end;
然后在buttonclick中这样写。
var
Handle: Integer;
FButtonHandle: Integer;
strFileName : String;
begin
FButtonHandle := 0;
Handle := FindWindow(nil,目标窗口');
if Handle <> 0 then
begin
EnumChildWindows(Handle,@GetButtonHandle,Integer(@Handle));
FButtonHandle := Handle;
end;
SendMessage(FButtonHandle,WM_LBUTTONDOWN,0,0);
SendMessage(FButtonHandle,WM_LBUTTONUP,0,0);
end;