Управление другой программой

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем regedit1, 24 дек 2007.

  1. regedit1

    regedit1 Гость

    Пожалуйста помогите...
    Имется программа - чат. Список пользователей, окно сообщений, поле для ввода своего сообщения и.д.

    Задача следующая:
    Необходимо каждую минуту автоматическу посылать сообщение в чат.
    Т.е. надо сначало вставить текст в поле типа "Edit" а потом програмно нажать на кнопку "Отправить".
    Тут вроде надо Send Message или нет?? Если его, то я только умею посылать команды типа закрыть и открыть...
    Также необходимо каждую секунду (лучше чаще) проверять окно чата на наличие определённого слова.
    Там, что то вроде "Memo".
    И уже исходя из этого отсылать другое сообщение в чат.
    ...конечно это не всё, но для начала хотя бы про это узнать. Если не сложно напишите пример управления блокнотом или калькулятором...
    Заранее спасибо!

    P.S Стоит Borland C++ Builder 6.
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
  3. regedit1

    regedit1 Гость

    Для: Morpheus
    Спасибо конечно, но про это я уже знаю, там написано только как получить дескриптор, передвинуть, закрыть и т.д. А мне бы хотелось узнать как вставить свой текст в тот же блокнот. Т.е. я нажимаю кнопку в своей программе и в блокнот вставляется какая нибудь фраза, например: "Привет!". В случае с чатом, там нужно ещё и ENTER пргорамно нажать....
     
  4. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    ну там же рядом вот
    GetWindowsText / SetWindowsText
    Для нажатия - SendMessage
     
  5. regedit1

    regedit1 Гость

    Посмотрел, почитал... Короче попробовал так:
    Код (Text):
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    HWND hWnd = FindWindow( _T("TGSGWND"), NULL);
    SetForegroundWindow(hWnd);
    hWnd = FindWindowEx( hWnd, NULL, _T("TPANEL"), NULL);
    SetForegroundWindow(hWnd);
    hWnd = FindWindowEx( hWnd, NULL, _T("TMEMO"), NULL);
    SetForegroundWindow(hWnd);
    SendMessage(hWnd, WM_CHAR, WPARAM('С'), 0x00250001);
    }
    //---------------------------------------------------------------------------
    Не работает (

    Вот тут скрин ещё сделал, посмотрите, что неправильно???

    [​IMG]
     
  6. regedit1

    regedit1 Гость

    Так, я тут переделал код, пробовал на блокноте - работает. Проблема в том, что не могу правильно найти дочернее окно TMemo в чате. Так как тут их намного больше чем в блокноте...
    Сначала я нахожу главное окно TGSGWND, потом хочу найти TPanel (на скрине 0001017E). Потом дочернее окно TMemo. Но не получается, я думаю что обращение происходит к первому Tpanel (на скрине 000100E8). Помогите!!! Как определить дочернее окно правильно!!!
    Вот код:
    Код (Text):
    HWND hWnd = FindWindow(("TGSGWND"), NULL);
    hWnd = FindWindowEx(hWnd, NULL,("TPanel"),NULL);
    hWnd = FindWindowEx(hWnd, NULL,("TMemo"),NULL);
    SendMessage(hWnd,WM_SETTEXT,NULL,LPARAM("Привет!"));
     
  7. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    какие отличительные черты у нужного дочернего окна?
     
  8. regedit1

    regedit1 Гость

    только то, что это окно для ввода своего сообщения... хотя это даже не окно, а поле для ввода
    З.Ы. А на скрине не видно? Сам то я плохо разбераюсь (
     
  9. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    пройтись надо по всем панелям(FindWindowEx( НєндлГлОкна, ХєндлДочернегоОкнаб БуферДляКласса, БуфферДляИмени ) - указівая второй параметр - FindWindowEx - вернёт следующую гнайденную панель

    Вот и надо пройтись по всем панелям ,пока не найдете ещё дочернее окно - мемо.
     
  10. regedit1

    regedit1 Гость

    спасибо, потратил часа три на чтение различных интернет статей и подходящий метериал нашёл на хакерском сайте. Просто надо было функцию FindWindowEx вызвать столько раз, сколько у меня дочерних окон.
    Теперь бы хотелось узнать, как можно в переменную занести данные из текстового файла, а лучше в м массив... Никто не знает??? )))
     
  11. gamecreator

    gamecreator Гость

    прочитать данные из файла
     
  12. SaNn

    SaNn Гость

    Я попробувал код: regedit1:
    Код (Text):
    HWND hWnd = FindWindow(("Jerry"), NULL);
    hWnd = FindWindowEx(hWnd, NULL,("TPanel"),NULL);
    hWnd = FindWindowEx(hWnd, NULL,("TMemo"),NULL);
    SendMessage(hWnd,WM_SETTEXT,NULL,LPARAM("Привет!"));
    После 3-й строки hWnd=NULL, чего я думаю недолжно быть...
    Я правда пробовал под свою программу, но это значеня не имеет.
     
  13. gamecreator

    gamecreator Гость

    любой контрол можно воспринимать как отдельное окно
     
Загрузка...

Поделиться этой страницей