• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

regedit1

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

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

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

morpheus

Вот простой пример
правда на Delphi, но думаю будет понятно
 
R

regedit1

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

morpheus

ну там же рядом
GetWindowsText / SetWindowsText
Для нажатия - SendMessage
 
R

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);
}
//---------------------------------------------------------------------------
Не работает (

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

link removed
 
R

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("Привет!"));
 
M

morpheus

какие отличительные черты у нужного дочернего окна?
 
R

regedit1

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

morpheus

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

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

regedit1

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

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, чего я думаю недолжно быть...
Я правда пробовал под свою программу, но это значеня не имеет.
 
G

gamecreator

любой контрол можно воспринимать как отдельное окно
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!