![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| VolanDeMort |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 9.10.2006 Репутация: нет Всего: нет |
Здравствуйте господа.
Подскажите с кагого бока подходить к проблеме. Есть окно стороннего приложения. В нем поле для ввода запроса, окно вывода результата и кнопка выполнения запроса ("Найти"). Запрос и ответ - обычные текстовые строки. Требуется программа, автоматически заполняющая поле запроса, "нажимающая" кнопку, и считывающая результат в текстовую переменную. Буду рад советам, или ссылкам на полезный материал. Заранее благодарю. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Если есть дескриптор главного окна (а его можно найти разными способами - по имени окна, например, см. FindWindow), то всех его потомков можно найти с помощью ид-ров дочерних окон: GetDlgItem(). А последние можно посмотреть Спаем.
-------------------- ... |
|||
|
||||
| VolanDeMort |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 9.10.2006 Репутация: нет Всего: нет |
Что такое "спай"?
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
win+R: spyxx.exe
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Spy, приложение такое. Наводишь на окошко и все про него узнаешь. В поставке MSVC. Если у тебя другой компилятор, спроси в соответствующем форуме, должен быть аналог...
-------------------- ... |
|||
|
||||
| VolanDeMort |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 9.10.2006 Репутация: нет Всего: нет |
Спасибо, пойду посмотреть
|
|||
|
||||
| VolanDeMort |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 9.10.2006 Репутация: нет Всего: нет |
Посмотрел. Теперь, если не сложно, подскажите как правильно послать сообщение, скажем елементу TEdit, если узвестен указатель на него? Мне нужно в поле ввести текст.
Я так понимаю что SendMessage (указатель, ...,...,...)... а дальше? Это сообщение отредактировал(а) VolanDeMort - 10.10.2006, 16:51 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
смотря какое? судя по в билдере сидишь пример
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| VolanDeMort |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 9.10.2006 Репутация: нет Всего: нет |
TEdit выдает Spy, а сижу в MSVC.Net.
1:SendMessage (Edit1->Handle, WM_GETTEXTLENGTH,0,0); - а где сдесь текст , который вставится в элемент? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Какой указатель? Все указатели "указывают" в память процесса, а у теюя разные приложения.
Spy выдает hwnd. Но на него опираться нельзя, т.к. это временный хандл: при новом запуске приложения он будет другим. Опираться надо на ID (control ID на первой сраничке описания окна, которое выдает Спай). НО: чтобы найти контрол по ID, сначала нужно найти его парента, т.е. главное окно приложения. Для этого, как я уже писала, можно использовать FindWindow, если у главного окна приложение есть уникальное имя и\или класс окна. Если нет - можно просматривать процессы и искать по имени EXE. Если это тоже твое приложение - то можно в него встроить какую-нибудь опознавалку, которая будет отвечать на какой-нибудь широковещательный запрос. Затем, когда главное окно найдено, можно найти его потомков с помощью GetDlgItem(). И уж ему слать сообщения: SendMessage (hwnd, message,...); Сообщение WM_GETTEXTLENGTH, как следует из названия, запрашивает длину текста, а устанавливает текст сообщение WM_SETTEXT. Только вот установить текст таким образом в чужом приложении не получится... -------------------- ... |
|||
|
||||
| VolanDeMort |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 9.10.2006 Репутация: нет Всего: нет |
А каким образом получится?
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
найдешь хендл эдита , тогда получится
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Не получится. Передавая текст, ты указываешь адрес строки в своем процессе.
Ну получит чужое окно сообщение, возьмет адрес строки... т.е. попытается...и что оно по этому адресу увидит? Передавать адреса нельзя. Т.е. можно, но для этого нужно специально извращаться. Но сообщения, где вся информация содержится в wParam \ lParam посылать вполне можно. Т.е. хочешь набить чем нибудь эдит - посылай ему по символу. Можно еще внедрится в процесс. -------------------- ... |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
Earnest, скачай этот файлик , там киношка , о том как работает SendMessage с чужими окнами
Файлик 511к -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Из описания функции SetWindowText в MSDN:
"To set the text of a control in another process, send the WM_SETTEXT message directly instead of calling SetWindowText" Видимо, сам Windows занимается пространствами процессов, как и в случае WM_COPYDATA |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |