Работа с окнами сторонних программ (делфи)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by CheatXX, 17 Sep 2010.

  1. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    Как работать со сторонними окнами в делфи?
    Например, открыто окно ICQ, как будет выглядеть программно через делфи ввести какой-нибудь текст в поле сообщения в ICQ?
     
  2. legaljo

    legaljo Member

    Joined:
    27 Jul 2010
    Messages:
    195
    Likes Received:
    26
    Reputations:
    7
    WinAPI, любой пример посылки сообщения стороннему приложению возьми, книги почитай..
     
  3. 0pTik

    0pTik Banned

    Joined:
    18 Jul 2010
    Messages:
    240
    Likes Received:
    85
    Reputations:
    17
    FindWindow/SendMessage в яндексе вбей
     
  4. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    procedure TForm1.Button1Click(Sender: TObject);
    var
    S,S1 : HWND;
    begin
    S:= FindWindow(nil,'Navicat 8 for MySQL');
    S1:=FindWindowEx(S, 0, 0, 'Connection');
    SendMessage(S1, WM_LBUTTONDOWN, 0,0);
    SendMessage(S1, WM_LBUTTONUP, 0,0);
    end;

    почему ни как не реагирует?

    создал тупо прогу с кнопкой которая выводит showmessage... в ней получается нажать на кнопку... а вот в ICQ, калькуляторе и любых других не получается нажать...
     
    #4 CheatXX, 17 Sep 2010
    Last edited: 17 Sep 2010
  5. NemeZz

    NemeZz Elder - Старейшина

    Joined:
    20 Aug 2008
    Messages:
    102
    Likes Received:
    67
    Reputations:
    3
    1. После вызова FindWindow и FindWindowEx почему нет проверки хендла? может не нашел (не верно указал класс, кепшен и т.п.)? Попробуй с помощью Spy++ посмотреть - правильные ли captions смотришь, может там не Connection, а &Connection, разницу улавливаешь?
    2. Лучше посылать не вниз-вверх, а BM_CLICK
     
    1 person likes this.
  6. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    как можно вывести хендл? или как приобразовать HWND в строку
    Incompatible types: 'String' and 'HWND'
     
  7. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    IntToStr(Handle);
     
  8. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    S:= FindWindow(nil,'[тут логин] - Окно сообщений| ICQ# аська');
    S1:=FindWindowEx(S, 0, 0, 'Отправить');


    S = 656594
    S1 = 0
    а через sky++ показывает хенлд окна 000A04D2


    т.е я так понял он не может получить хенд кнопки? в чем проблема..
     
    #8 CheatXX, 17 Sep 2010
    Last edited: 17 Sep 2010
  9. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    S равно 656594.. а S1 почему-то 0...

    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    S,S1 : HWND;
    begin
    S:= FindWindow(nil,'[name002] - Окно сообщений | User ID name002@qip.ru');
    S1:=FindWindowEx(S, 0, 0, 'Отправить');
    ShowMessage(IntToStr(S1));
    SendMessage(S1, WM_LBUTTONDOWN, 0,0);
    SendMessage(S1, WM_LBUTTONUP, 0,0);
    end;
     
  10. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    в одной программе может нажать... а в другой (ICQ) нет... может надо класс кнопки указывать или еше что то?
     
  11. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    В некоторых программах кнопки - вовсе не кнопки, а просто картинки. В этом случае нужно посылать WM_LBUTTONDOWN - WM_LBUTTONUP с нужными координатами
     
  12. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    как это делать? можно пример
     
  13. NemeZz

    NemeZz Elder - Старейшина

    Joined:
    20 Aug 2008
    Messages:
    102
    Likes Received:
    67
    Reputations:
    3
    s1 = 0, что прямо говорит, что ты не получаешь хендл нужного объекта. Покажи софт сюда, посмотрим. Попробуй не через Caption, а через класс (в третьем параметре) или их связку. Посмотри точные имена классов и надписей.