Нажать на кнопку в другом приложении

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall;

var

szFull: array[0..MAX_PATH] of Char; //Buffer for window caption

begin

Result := Wnd 0;

if Result then

begin

GetWindowText(Wnd, szFull, SizeOf(szFull)); // put window text in buffer

if (Pos(SL[0], StrPas(szFull)) > 0) // Test for text

and (SL.IndexOfObject(TObject(Wnd)) < 0) // Test for duplicate handles

then SL.AddObject(StrPas(szFull), TObject(Wnd)); // Add item to list

EnumChildWindows(Wnd, @EnumChildProc, Longint(SL)); //Recurse into child windows

end;

end;

function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean;

var

SL: TStringList;

H: hWnd;

begin

SL := TStringList.Create;

try

SL.AddObject(ButtonCaption, nil); // First item in list is text to find

EnumChildWindows(ParentWindow, @EnumChildProc, Longint(SL));

H := 0;

case SL.Count of

1: ShowMessage(‘Window text not found.’);

2: H := hWnd(SL.Objects[1]);

else

ShowMessage(‘Ambiguous text detected.’);

end;

finally

SL.Free;

end;

Result := H 0;

if Result then PostMessage(H, BM_CLICK, 0, 0);

end;

// Rememeber the ampresand for underlined characters

// if the ‘c’ is underlined, then the text is ‘

Добавить комментарий