Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить дескриптор окна? 
:(
    Опции темы
VolanDeMort
Дата 9.10.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



Здравствуйте господа. 

Подскажите с кагого бока подходить к проблеме. Есть окно стороннего приложения. В нем поле для ввода запроса, окно вывода результата и кнопка выполнения запроса ("Найти"). Запрос и ответ - обычные текстовые строки. Требуется программа, автоматически заполняющая поле запроса, "нажимающая" кнопку, и считывающая результат в текстовую переменную. Буду рад советам, или ссылкам на полезный материал.

Заранее благодарю.
PM MAIL   Вверх
Earnest
Дата 9.10.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Если есть дескриптор главного окна (а его можно найти разными способами - по имени окна, например, см. FindWindow), то всех его потомков можно найти с помощью ид-ров дочерних окон: GetDlgItem(). А последние можно посмотреть Спаем.


--------------------
...
PM   Вверх
VolanDeMort
Дата 9.10.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



Что такое "спай"?
PM MAIL   Вверх
_hunter
Дата 9.10.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



win+R: spyxx.exe


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Earnest
Дата 9.10.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Spy, приложение такое. Наводишь на окошко и все про него узнаешь. В поставке MSVC. Если у тебя другой компилятор, спроси в соответствующем форуме, должен быть аналог...


--------------------
...
PM   Вверх
VolanDeMort
Дата 9.10.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



Спасибо, пойду посмотреть  smile 
PM MAIL   Вверх
VolanDeMort
Дата 10.10.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



Посмотрел. Теперь, если не сложно, подскажите как правильно послать сообщение, скажем елементу TEdit, если узвестен указатель на него? Мне нужно в поле ввести текст.
 Я так понимаю что SendMessage (указатель, ...,...,...)... а дальше?

Это сообщение отредактировал(а) VolanDeMort - 10.10.2006, 16:51
PM MAIL   Вверх
Romikgy
Дата 10.10.2006, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата(VolanDeMort @  10.10.2006,  15:45 Найти цитируемый пост)
а дальше?

смотря какое?
судя по 
Цитата(VolanDeMort @  10.10.2006,  15:45 Найти цитируемый пост)
TEdit

в билдере сидишь
пример
Код

SendMessage (Edit1->Handle, WM_GETTEXTLENGTH,0,0);



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
VolanDeMort
Дата 11.10.2006, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



TEdit выдает Spy, а сижу в MSVC.Net. 

1:SendMessage (Edit1->Handle, WM_GETTEXTLENGTH,0,0); - а где сдесь текст , который вставится в элемент?

PM MAIL   Вверх
Earnest
Дата 11.10.2006, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Какой указатель? Все указатели "указывают" в память процесса, а у теюя разные приложения.
Spy выдает hwnd. Но на него опираться нельзя, т.к. это временный хандл: при новом запуске приложения он будет другим. Опираться надо на ID (control ID на первой сраничке описания окна, которое выдает Спай). 

НО: чтобы найти контрол по ID, сначала нужно найти его парента, т.е. главное окно приложения.

Для этого, как я уже писала, можно использовать FindWindow, если у главного окна приложение есть уникальное имя и\или класс окна. Если нет - можно просматривать процессы и искать по имени EXE. Если это тоже твое приложение - то можно в него встроить какую-нибудь опознавалку, которая будет отвечать на какой-нибудь широковещательный запрос.
Затем, когда главное окно найдено, можно найти его потомков с помощью GetDlgItem().
И уж ему слать сообщения: SendMessage (hwnd, message,...);


Сообщение WM_GETTEXTLENGTH, как следует из названия, запрашивает длину текста, а устанавливает текст сообщение WM_SETTEXT.
Только вот установить текст таким образом в чужом приложении не получится...


--------------------
...
PM   Вверх
VolanDeMort
Дата 11.10.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



А каким образом получится?
PM MAIL   Вверх
Romikgy
Дата 11.10.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



найдешь хендл эдита , тогда получится smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Earnest
Дата 11.10.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Не получится. Передавая текст, ты указываешь адрес строки в своем процессе.
Ну получит чужое окно сообщение, возьмет адрес строки... т.е. попытается...и что оно по этому адресу увидит?

Передавать адреса нельзя. Т.е. можно, но для этого нужно специально извращаться.
Но сообщения, где вся информация содержится в wParam \ lParam посылать вполне можно.
Т.е. хочешь набить чем нибудь эдит - посылай ему по символу.
Можно еще внедрится в процесс.


--------------------
...
PM   Вверх
Romikgy
Дата 11.10.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Earnest, скачай этот файлик , там киношка , о том как работает SendMessage с чужими окнами smile
Файлик 511к


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
0x07L
Дата 11.10.2006, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.