Задать вопрос
@NikParam42

Как из программы получить доступ к UI полям другой программы?

Есть программа с графическим интерфейсом написанная при помощи QT
Подскажите как мне из моей программы, получить доступ к запущенной другой программе и вписать в какое либо ее поле некоторое значение и,допустим, нажать кнопу "отправить"

Занимаюсь фаззингом, а все все все фаззеры написаны для программ получающих данные из командой строки, а мне нужно подавать данные в поля UI
  • Вопрос задан
  • 194 просмотра
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
@rPman
Правильный способ (не советую) - сложный, нужно выявить точную версию компонент, собрать соответствующее приложение с их использованием (только так можно будет использовать объекты и вызывать методы правильно) и инжектить его код в процесс. Тогда вы получите доступ ко всем элементам и сможете делать что то типа getText()

Неправильный (рекомендую) - простой, симулируете действия пользователя, отправляя окну события клавитуры и мышки (или напрямую через средства ОС, например в windows это отправка сообщений WM_... в win api есть соответствующие методы), к сожалению в QT компоненты не являются win api объектами, даже label таковым не является и у вас будет просто одно окно с битмапом, а это значит для чтения содержимого окна можно использовать только экран (и распознование текста по изображению) и в некоторых случаях clipboard, например необходимое поле это EditBox, симулируем команду ctrl+a (выделить весь текст) ctrl+c (скопировать) и тут же читаем содержимое в своей программе

Второе успешно использовалось в проекте где необходимо было получать данные из программ, написанных с использованием ОЧЕНЬ разных инструментов и следить за компонентами каждого чтобы пересобирать код инжекта каждый раз как оно обновится - геморно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы