Russian Qt Forum
Ноябрь 26, 2024, 05:29
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Доступ к информации другого прложения
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Доступ к информации другого прложения (Прочитано 5563 раз)
Orfus
Гость
Доступ к информации другого прложения
«
:
Декабрь 24, 2010, 00:54 »
Доброго времени суток. Столкнулся с новой для себя проблемой. Раньше никогда подобного не делал, но работающие образцы сделанные на С++ видел.
Имеется приложение
А
и приложение
В
.
А
пишется мной,
В
написано некоторым другим лицом. На чём оно писалось мне не известно. В приложении
В
имеется некое текстовое поле. Мне же необходимо чтобы приложение
А
переодически вытаскивало информацию из текстового поля приложения
В
.
Вопрос в том возможно ли реализовать такое впринципе и если да, то в каком направлении копать (что читать на эту тему
) ?
Так же интересует возможно ли из приложения
А
, по наступлению некоторого события (Timeout у таймера например) нажимать на кнопку в приложении "В"?
«
Последнее редактирование: Декабрь 24, 2010, 12:24 от Orfus
»
Записан
brankovic
Гость
Re: Доступ к информация другого прложения
«
Ответ #1 :
Декабрь 24, 2010, 01:17 »
Вообще-то платформу надо указывать. Постановка не кросс-платформенная, к кьют отношения не имеет.
Под винду можно иногда. Читать на msdn про sendmessage, параметры WM_COMMAND (чтобы кликнуть), WM_GETTEXT (чтобы украсть текст). Идентификаторы окон можно узнать через spy++. Мне точно удавалось кликать и удавалось _выставлять_ текст (под ХР). Но может не сработать, особенно если цель написана на кьют.
«
Последнее редактирование: Декабрь 24, 2010, 01:29 от brankovic
»
Записан
fuCtor
Гость
Re: Доступ к информация другого прложения
«
Ответ #2 :
Декабрь 24, 2010, 07:52 »
Цитата: brankovic от Декабрь 24, 2010, 01:17
Но может не сработать, особенно если цель написана на кьют.
Не может, а не сработает. Т.к. Qt создает только главное окно, все осталольное отрисовывается самостоятельно => нет дискрипторов у элементов.
Записан
ufna
Гость
Re: Доступ к информация другого прложения
«
Ответ #3 :
Декабрь 24, 2010, 08:03 »
Сработает, если знать как подключаться
Там через .dll идет подступ, через Qt'шные апи.
Сабжевая задача - hook
Записан
break
Гипер активный житель
Offline
Сообщений: 846
Re: Доступ к информация другого прложения
«
Ответ #4 :
Декабрь 24, 2010, 11:31 »
Цитата: ufna от Декабрь 24, 2010, 08:03
Сработает, если знать как подключаться
Там через .dll идет подступ, через Qt'шные апи.
Сабжевая задача - hook
А можно по подробнее - какое Qt-шное API доступно нам если мы хотим контактировать с чужим приложением без исходников?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Доступ к информация другого прложения
«
Ответ #5 :
Декабрь 24, 2010, 12:02 »
Ну в общем контактировать надо с тем кто этого контакта хочет
Разработчикам A и B несложно договориться - напр. B валит измененное поле в clipboard а то и просто в текстовый файл. А так извлечь можно через WinAPI или dll, но просто жалко потраченного впустую труда. Плюс вероятно выяснится что нужно не только 1 тестовое поле, а и... Лучше изучить варианты "легализации"
Записан
Orfus
Гость
Re: Доступ к информация другого прложения
«
Ответ #6 :
Декабрь 24, 2010, 13:06 »
Цитата: brankovic от Декабрь 24, 2010, 01:17
Вообще-то платформу надо указывать. Постановка не кросс-платформенная, к кьют отношения не имеет.
Извиняюсь, под Win на данный момент.
Цитата: Igors от Декабрь 24, 2010, 12:02
Ну в общем контактировать надо с тем кто этого контакта хочет
Разработчикам A и B несложно договориться - напр.
Разработчик В по хорошему не должен знать, что его читают. Полей там вообще говоря будет много как и дочерних окон. Гемор от всего этого осознал на этапе задумки, но всё же решился делать. Просто не знаю, что читать по этой теме. Я так понял надо смотреть в сторону WinAPI. Буду разбиратся.
ЗЫ Пишу не шпионы
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Доступ к информация другого прложения
«
Ответ #7 :
Декабрь 24, 2010, 13:24 »
Цитата: Orfus от Декабрь 24, 2010, 13:06
Разработчик В по хорошему не должен знать, что его читают. Полей там вообще говоря будет много как и дочерних окон. Гемор от всего этого осознал на этапе задумки, но всё же решился делать. Просто не знаю, что читать по этой теме. Я так понял надо смотреть в сторону WinAPI. Буду разбиратся.
Ну если так - сочувствую. Сначала смотрите в spy где что. Если нужное поле "окно Вындоуз" - то получается несложно, через FindWindow
Записан
brankovic
Гость
Re: Доступ к информация другого прложения
«
Ответ #8 :
Декабрь 24, 2010, 13:28 »
Цитата: Orfus от Декабрь 24, 2010, 13:06
Я так понял надо смотреть в сторону WinAPI. Буду разбиратся.
SendMessage и FindWindow как раз winapi. Но если окон реально много, то не стоит возни, имхо. Я писал автоматизацию одного диалога -- расставлял параметры, нажимал кнопку generate. Получилось просто, но там вся программа это один диалог.
Цитата: Orfus от Декабрь 24, 2010, 13:06
ЗЫ Пишу не шпионы
меня терзают смутные сомненья..
Записан
SASA
Гость
Re: Доступ к информации другого прложения
«
Ответ #9 :
Декабрь 24, 2010, 14:29 »
Если писано с использованием Win API, то текст передается в окно через специальное сообщение (аля SetWindowText). Можно поставить хук, который будет отлавливать эти сообщения.
Как уже говорили, нужно потыркать спем(тулза, ставится со студией), чтобы найти отличительные особенности окошка с текстом. Это поможет отфильтровать только те сообщения, которые идут именно этому окну.
Про нажимания - смотри функцию
Код:
VOID mouse_event(
DWORD dwFlags,
DWORD dx,
DWORD dy,
DWORD dwData,
DWORD dwExtraInfo
);
Кликает где хочешь и как хочешь
Записан
ufna
Гость
Re: Доступ к информации другого прложения
«
Ответ #10 :
Декабрь 24, 2010, 18:58 »
Счас с переходом Full Tilt на Qt тема хуков "в Qt" неимоверно возрасла
счас с делами разгребусь, на это дело статью сделаю. Хотя на иностранных форумах "по частям" ответ на этот вопрос найти можно.
Записан
fuCtor
Гость
Re: Доступ к информации другого прложения
«
Ответ #11 :
Декабрь 25, 2010, 06:48 »
Хук через подмену dll со своим кодом (для логирования или IPC) в нужных местах (QWidget::event например)?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...