Russian Qt Forum
Ноябрь 05, 2024, 19:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ к информации другого прложения  (Прочитано 5533 раз)
Orfus
Гость
« : Декабрь 24, 2010, 00:54 »

Доброго времени суток. Столкнулся с новой для себя проблемой. Раньше никогда подобного не делал, но работающие образцы сделанные на С++ видел.

Имеется приложение А и приложение В. А пишется мной, В написано некоторым другим лицом. На чём оно писалось мне не известно. В приложении В имеется некое текстовое поле. Мне же необходимо чтобы приложение А переодически вытаскивало информацию из текстового поля приложения В.

Вопрос в том возможно ли реализовать такое впринципе и если да, то в каком направлении копать (что читать на эту тему  Смеющийся ) ?
Так же интересует возможно ли из приложения А, по наступлению некоторого события (Timeout у таймера например) нажимать на кнопку в приложении "В"?  Непонимающий
« Последнее редактирование: Декабрь 24, 2010, 12:24 от Orfus » Записан
brankovic
Гость
« Ответ #1 : Декабрь 24, 2010, 01:17 »

Вообще-то платформу надо указывать. Постановка не кросс-платформенная, к кьют отношения не имеет.

Под винду можно иногда. Читать на msdn про sendmessage, параметры WM_COMMAND (чтобы кликнуть), WM_GETTEXT (чтобы украсть текст). Идентификаторы окон можно узнать через spy++. Мне точно удавалось кликать и удавалось _выставлять_ текст (под ХР). Но может не сработать, особенно если цель написана на кьют.

« Последнее редактирование: Декабрь 24, 2010, 01:29 от brankovic » Записан
fuCtor
Гость
« Ответ #2 : Декабрь 24, 2010, 07:52 »

Но может не сработать, особенно если цель написана на кьют.

Не может, а не сработает. Т.к. Qt создает только главное окно, все осталольное отрисовывается самостоятельно => нет дискрипторов у элементов.
Записан
ufna
Гость
« Ответ #3 : Декабрь 24, 2010, 08:03 »

Сработает, если знать как подключаться Улыбающийся Там через .dll идет подступ, через Qt'шные апи.

Сабжевая задача - hook
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #4 : Декабрь 24, 2010, 11:31 »

Сработает, если знать как подключаться Улыбающийся Там через .dll идет подступ, через Qt'шные апи.

Сабжевая задача - hook

А можно по подробнее - какое Qt-шное API доступно нам если мы хотим контактировать с чужим приложением без исходников?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Декабрь 24, 2010, 12:02 »

Ну в общем контактировать надо с тем кто этого контакта хочет  Улыбающийся Разработчикам A и B несложно договориться - напр. B валит измененное поле в clipboard а то и просто в текстовый файл. А так извлечь можно через WinAPI или dll, но просто жалко потраченного  впустую труда. Плюс вероятно выяснится что нужно не только 1 тестовое поле, а и... Лучше изучить варианты "легализации"  Улыбающийся 
Записан
Orfus
Гость
« Ответ #6 : Декабрь 24, 2010, 13:06 »

Вообще-то платформу надо указывать. Постановка не кросс-платформенная, к кьют отношения не имеет.
Извиняюсь, под Win на данный момент.
Ну в общем контактировать надо с тем кто этого контакта хочет  Улыбающийся Разработчикам A и B несложно договориться - напр.
Разработчик В по хорошему не должен знать, что его читают. Полей там вообще говоря будет много как и дочерних окон. Гемор от всего этого осознал на этапе задумки, но всё же решился делать. Просто не знаю, что читать по этой теме. Я так понял надо смотреть в сторону WinAPI. Буду разбиратся.


ЗЫ Пишу не шпионы Смеющийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Декабрь 24, 2010, 13:24 »

Разработчик В по хорошему не должен знать, что его читают. Полей там вообще говоря будет много как и дочерних окон. Гемор от всего этого осознал на этапе задумки, но всё же решился делать. Просто не знаю, что читать по этой теме. Я так понял надо смотреть в сторону WinAPI. Буду разбиратся.
Ну если так - сочувствую. Сначала смотрите в spy где что. Если нужное поле "окно Вындоуз" - то получается несложно, через FindWindow
Записан
brankovic
Гость
« Ответ #8 : Декабрь 24, 2010, 13:28 »


Я так понял надо смотреть в сторону WinAPI. Буду разбиратся.


SendMessage и FindWindow как раз winapi. Но если окон реально много, то не стоит возни, имхо. Я писал автоматизацию одного диалога -- расставлял параметры, нажимал кнопку generate. Получилось просто, но там вся программа это один диалог.


ЗЫ Пишу не шпионы Смеющийся

меня терзают смутные сомненья..  В замешательстве
Записан
SASA
Гость
« Ответ #9 : Декабрь 24, 2010, 14:29 »

Если писано с использованием Win API, то текст передается в окно через специальное сообщение (аля SetWindowText). Можно поставить хук, который будет отлавливать эти сообщения.
Как уже говорили, нужно потыркать спем(тулза, ставится со студией), чтобы найти отличительные особенности окошка с текстом. Это поможет отфильтровать только те сообщения, которые идут именно этому окну.
Про нажимания - смотри функцию
Код:
VOID mouse_event(
  DWORD dwFlags,
  DWORD dx,
  DWORD dy,
  DWORD dwData,
  DWORD dwExtraInfo
);
Кликает где хочешь и как хочешь Улыбающийся
Записан
ufna
Гость
« Ответ #10 : Декабрь 24, 2010, 18:58 »

Счас с переходом Full Tilt на Qt тема хуков "в Qt" неимоверно возрасла Улыбающийся счас с делами разгребусь, на это дело статью сделаю. Хотя на иностранных форумах "по частям" ответ на этот вопрос найти можно.
Записан
fuCtor
Гость
« Ответ #11 : Декабрь 25, 2010, 06:48 »

Хук через подмену dll со своим кодом (для логирования или IPC) в нужных местах (QWidget::event например)?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.