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

  • Автор темы regedit1
  • Дата начала
R

regedit1

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

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

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

regedit1

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

regedit1

#5
Посмотрел, почитал... Короче попробовал так:
Код:
//---------------------------------------------------------------------------
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);
}
//---------------------------------------------------------------------------
Не работает (

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

 
R

regedit1

#6
Так, я тут переделал код, пробовал на блокноте - работает. Проблема в том, что не могу правильно найти дочернее окно 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

скриптописец
07.08.2006
3 915
1
#7
какие отличительные черты у нужного дочернего окна?
 
R

regedit1

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

morpheus

скриптописец
07.08.2006
3 915
1
#9
пройтись надо по всем панелям(FindWindowEx( НєндлГлОкна, ХєндлДочернегоОкнаб БуферДляКласса, БуфферДляИмени ) - указівая второй параметр - FindWindowEx - вернёт следующую гнайденную панель

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

regedit1

#10
спасибо, потратил часа три на чтение различных интернет статей и подходящий метериал нашёл на хакерском сайте. Просто надо было функцию FindWindowEx вызвать столько раз, сколько у меня дочерних окон.
Теперь бы хотелось узнать, как можно в переменную занести данные из текстового файла, а лучше в м массив... Никто не знает??? )))
 
S
#12
Я попробувал код: 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, чего я думаю недолжно быть...
Я правда пробовал под свою программу, но это значеня не имеет.
 
G

gamecreator

#13
любой контрол можно воспринимать как отдельное окно