Название: Доступ к информации другого прложения Отправлено: Orfus от Декабрь 24, 2010, 00:54 Доброго времени суток. Столкнулся с новой для себя проблемой. Раньше никогда подобного не делал, но работающие образцы сделанные на С++ видел.
Имеется приложение А и приложение В. А пишется мной, В написано некоторым другим лицом. На чём оно писалось мне не известно. В приложении В имеется некое текстовое поле. Мне же необходимо чтобы приложение А переодически вытаскивало информацию из текстового поля приложения В. Вопрос в том возможно ли реализовать такое впринципе и если да, то в каком направлении копать (что читать на эту тему ;D ) ? Так же интересует возможно ли из приложения А, по наступлению некоторого события (Timeout у таймера например) нажимать на кнопку в приложении "В"? ??? Название: Re: Доступ к информация другого прложения Отправлено: brankovic от Декабрь 24, 2010, 01:17 Вообще-то платформу надо указывать. Постановка не кросс-платформенная, к кьют отношения не имеет.
Под винду можно иногда. Читать на msdn про sendmessage, параметры WM_COMMAND (чтобы кликнуть), WM_GETTEXT (чтобы украсть текст). Идентификаторы окон можно узнать через spy++. Мне точно удавалось кликать и удавалось _выставлять_ текст (под ХР). Но может не сработать, особенно если цель написана на кьют. Название: Re: Доступ к информация другого прложения Отправлено: fuCtor от Декабрь 24, 2010, 07:52 Но может не сработать, особенно если цель написана на кьют. Не может, а не сработает. Т.к. Qt создает только главное окно, все осталольное отрисовывается самостоятельно => нет дискрипторов у элементов. Название: Re: Доступ к информация другого прложения Отправлено: ufna от Декабрь 24, 2010, 08:03 Сработает, если знать как подключаться :) Там через .dll идет подступ, через Qt'шные апи.
Сабжевая задача - hook Название: Re: Доступ к информация другого прложения Отправлено: break от Декабрь 24, 2010, 11:31 Сработает, если знать как подключаться :) Там через .dll идет подступ, через Qt'шные апи. Сабжевая задача - hook А можно по подробнее - какое Qt-шное API доступно нам если мы хотим контактировать с чужим приложением без исходников? Название: Re: Доступ к информация другого прложения Отправлено: Igors от Декабрь 24, 2010, 12:02 Ну в общем контактировать надо с тем кто этого контакта хочет :) Разработчикам A и B несложно договориться - напр. B валит измененное поле в clipboard а то и просто в текстовый файл. А так извлечь можно через WinAPI или dll, но просто жалко потраченного впустую труда. Плюс вероятно выяснится что нужно не только 1 тестовое поле, а и... Лучше изучить варианты "легализации" :)
Название: Re: Доступ к информация другого прложения Отправлено: Orfus от Декабрь 24, 2010, 13:06 Вообще-то платформу надо указывать. Постановка не кросс-платформенная, к кьют отношения не имеет. Извиняюсь, под Win на данный момент.Ну в общем контактировать надо с тем кто этого контакта хочет :) Разработчикам A и B несложно договориться - напр. Разработчик В по хорошему не должен знать, что его читают. Полей там вообще говоря будет много как и дочерних окон. Гемор от всего этого осознал на этапе задумки, но всё же решился делать. Просто не знаю, что читать по этой теме. Я так понял надо смотреть в сторону WinAPI. Буду разбиратся.ЗЫ Пишу не шпионы ;D Название: Re: Доступ к информация другого прложения Отправлено: Igors от Декабрь 24, 2010, 13:24 Разработчик В по хорошему не должен знать, что его читают. Полей там вообще говоря будет много как и дочерних окон. Гемор от всего этого осознал на этапе задумки, но всё же решился делать. Просто не знаю, что читать по этой теме. Я так понял надо смотреть в сторону WinAPI. Буду разбиратся. Ну если так - сочувствую. Сначала смотрите в spy где что. Если нужное поле "окно Вындоуз" - то получается несложно, через FindWindowНазвание: Re: Доступ к информация другого прложения Отправлено: brankovic от Декабрь 24, 2010, 13:28 Я так понял надо смотреть в сторону WinAPI. Буду разбиратся. SendMessage и FindWindow как раз winapi. Но если окон реально много, то не стоит возни, имхо. Я писал автоматизацию одного диалога -- расставлял параметры, нажимал кнопку generate. Получилось просто, но там вся программа это один диалог. ЗЫ Пишу не шпионы ;D меня терзают смутные сомненья.. :-\ Название: Re: Доступ к информации другого прложения Отправлено: SASA от Декабрь 24, 2010, 14:29 Если писано с использованием Win API, то текст передается в окно через специальное сообщение (аля SetWindowText). Можно поставить хук, который будет отлавливать эти сообщения.
Как уже говорили, нужно потыркать спем(тулза, ставится со студией), чтобы найти отличительные особенности окошка с текстом. Это поможет отфильтровать только те сообщения, которые идут именно этому окну. Про нажимания - смотри функцию Код: VOID mouse_event( Название: Re: Доступ к информации другого прложения Отправлено: ufna от Декабрь 24, 2010, 18:58 Счас с переходом Full Tilt на Qt тема хуков "в Qt" неимоверно возрасла :) счас с делами разгребусь, на это дело статью сделаю. Хотя на иностранных форумах "по частям" ответ на этот вопрос найти можно.
Название: Re: Доступ к информации другого прложения Отправлено: fuCtor от Декабрь 25, 2010, 06:48 Хук через подмену dll со своим кодом (для логирования или IPC) в нужных местах (QWidget::event например)?
|