Delphi - как нажимать кнопочки в окне чужой программы.

Тема в разделе "ASM, С/С++, Delphi, Java", создана пользователем jabbaxatt, 23 дек 2013.

  1. jabbaxatt

    jabbaxatt Добрый модератор

    Moderator
    Регистр.:
    21 янв 2009
    Сообщения:
    890
    Симпатии:
    418
    Нужно в своей программе, при нажатии на кнопку, найти запущенный процесс чужой программы (известно его имя), если он запущен - получить его HWND, потом вставить в поле в этом окне текст из буфера и нажать кнопку (или клавишу Enter).

    Где можно посмотреть примеры и разбор подобного кода?
     
  2. yaski

    yaski

    Регистр.:
    21 фев 2010
    Сообщения:
    491
    Симпатии:
    292
  3. mrsandy

    mrsandy Писатель

    Регистр.:
    10 июн 2008
    Сообщения:
    6
    Симпатии:
    0
    Последнее редактирование модератором: 26 дек 2013
  4. tanuchka

    tanuchka Создатель

    Регистр.:
    8 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    В. Рубанцев - Самоучитель Delphi в примерах, играх и программах. От простых приложений, решения задач и до программирования интеллектуальных игр

    Д. Осипов - Delphi. Программирование для Windows, OS X, iOS и Android

    Вот один из примеров:

    Код:
    var:
    h1,h2: HWND;
    begin
    h1 := FindWindow(nil, 'Form1');
    h2 := FindWindowEx(h1,0,'TRichEdit',nil);
    SendMessage(h2, WM_SETTEXT, 0, lparam(LPCTSTR('вот ты где')));
    end;
    
    Зная Class Name можно заслать текст. Но как его посылать, если элемент закопан глубоко, а не лежит сразу на главной форме?
    Перебирать все h1.....hn ???
    h1 := FindWindow(nil, 'Form1');
    h2 := FindWindowEx(h1,0,Class Name,nil);
    ..........
    hn := FindWindowEx(hn-1,0,Class Name,nil);
    SendMessage(hn, WM_SETTEXT, 0, lparam(LPCTSTR('вот ты где')));
    
    и ещё почему-то в тестовой программе-доноре (накидал на форму разных компонентов для проверки) лежащая на главной форме кнопка SpeedButton1 с Caption := 'SENDER' не выполняет ни этот код:
    h3 := FindWindowEx(h2,0,nil,'SEND');
    PostMessage(h3, BM_CLICK, 0, 0);
    ни этот:
    h3 := FindWindowEx(h2,0,nil,'SEND');
    SendMessage(h3, WM_LBUTTONDOWN, 0, 0);
    SendMessage(h3, WM_LBUTTONUP, 0, 0);
     
    Последнее редактирование модератором: 9 мар 2014
  5. Sowenak

    Sowenak Писатель

    Регистр.:
    13 мар 2015
    Сообщения:
    5
    Симпатии:
    0
    В. Рубанцев - Самоучитель Delphi в примерах, играх и программах. - советую
     
  6. XanderDurden

    XanderDurden Создатель

    Регистр.:
    18 июл 2012
    Сообщения:
    10
    Симпатии:
    1
    и нажать кнопку (или клавишу Enter)
    для подобных целей нажимать виртуальные клавиши - только в крайнем случае, т.к. клик по кнопке и любые другие виндовые сообщения прилетят однозначно в нужное окно(если все правильно выбрано), даже если оно не в фокусе и т.д., а вот эмуляция нажатий на клавиши прилетит в текущее активное окно.
     
  7. Volukrem

    Volukrem Создатель

    Регистр.:
    8 мар 2016
    Сообщения:
    46
    Симпатии:
    5
    Книги Архангельского еще почитайте.