Delphi World - Нажать на кнопку в другом приложении
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Нажать на кнопку в другом приложении


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 '&click'

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования