Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Управление другой программой
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
regedit1
Пожалуйста помогите...
Имется программа - чат. Список пользователей, окно сообщений, поле для ввода своего сообщения и.д.

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

P.S Стоит Borland C++ Builder 6.
Morpheus
Вот простой пример ]]>Взаимодействие с чужими окнами ]]>
правда на Delphi, но думаю будет понятно
regedit1
Для: Morpheus
Спасибо конечно, но про это я уже знаю, там написано только как получить дескриптор, передвинуть, закрыть и т.д. А мне бы хотелось узнать как вставить свой текст в тот же блокнот. Т.е. я нажимаю кнопку в своей программе и в блокнот вставляется какая нибудь фраза, например: "Привет!". В случае с чатом, там нужно ещё и ENTER пргорамно нажать....
Morpheus
ну там же рядом ]]>вот]]>
GetWindowsText / SetWindowsText
Для нажатия - SendMessage
regedit1
Посмотрел, почитал... Короче попробовал так:
//---------------------------------------------------------------------------
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);
}
//---------------------------------------------------------------------------

Не работает (

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

regedit1
Так, я тут переделал код, пробовал на блокноте - работает. Проблема в том, что не могу правильно найти дочернее окно TMemo в чате. Так как тут их намного больше чем в блокноте...
Сначала я нахожу главное окно TGSGWND, потом хочу найти TPanel (на скрине 0001017E). Потом дочернее окно TMemo. Но не получается, я думаю что обращение происходит к первому Tpanel (на скрине 000100E8). Помогите!!! Как определить дочернее окно правильно!!!
Вот код:
HWND hWnd = FindWindow(("TGSGWND"), NULL);
hWnd = FindWindowEx(hWnd, NULL,("TPanel"),NULL);
hWnd = FindWindowEx(hWnd, NULL,("TMemo"),NULL);
SendMessage(hWnd,WM_SETTEXT,NULL,LPARAM("Привет!"));
Morpheus
какие отличительные черты у нужного дочернего окна?
regedit1
только то, что это окно для ввода своего сообщения... хотя это даже не окно, а поле для ввода
З.Ы. А на скрине не видно? Сам то я плохо разбераюсь (
Morpheus
пройтись надо по всем панелям(FindWindowEx( НєндлГлОкна, ХєндлДочернегоОкнаб БуферДляКласса, БуфферДляИмени ) - указівая второй параметр - FindWindowEx - вернёт следующую гнайденную панель

Вот и надо пройтись по всем панелям ,пока не найдете ещё дочернее окно - мемо.
regedit1
спасибо, потратил часа три на чтение различных интернет статей и подходящий метериал нашёл на хакерском сайте. Просто надо было функцию FindWindowEx вызвать столько раз, сколько у меня дочерних окон.
Теперь бы хотелось узнать, как можно в переменную занести данные из текстового файла, а лучше в м массив... Никто не знает??? )))
gamecreator
прочитать данные из файла
SaNn
Я попробувал код: regedit1:
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, чего я думаю недолжно быть...
Я правда пробовал под свою программу, но это значеня не имеет.
gamecreator
любой контрол можно воспринимать как отдельное окно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.