Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: C++/C работа с другим приложением  (Прочитано 1742 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн A.i.D.

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
C++/C работа с другим приложением
« : 13 Октября 2013, 15:55:12 »
Всем привет! Может кто-то сталкивался с такой проблемой, как передача нажатия клавиш другому приложению, либо нажатие на кнопку в другом приложении.
Предположим, есть текстовый редактор, и требуется написать в нем текст, потом нажать на кнопку сохранить.
Вопрос:
- как найти окно приложения
- как передать нажатие клавиш в нем
- как определить кнопки
« Последнее редактирование: 13 Октября 2013, 15:57:07 от A.i.D. »
Ubuntu 12.04, Centos 6.2, SAMS, SQUID, VuurMuur, ISPConfig.

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: C++/C работа с другим приложением
« Ответ #1 : 13 Октября 2013, 16:23:36 »
A.i.D.,
Зайдите сюда http://chess-11.narod.ru/

Там есть программа Винигрет с исходником,
где имеется код текстового редактора.
Там найдете ответ на ваши вопросы.

Оффлайн A.i.D.

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: C++/C работа с другим приложением
« Ответ #2 : 13 Октября 2013, 16:37:54 »
Спасибо, но это не то. Мне требуется подключиться к другому приложению. Текстовый редактор, это просто пример. Возьмем ниже, у вас открыта консоль, и тебуется ввести там текст, не через system(), а именно создать эмуляцию нажатия клавиши в стороннем/"левом" приложении.

Пользователь решил продолжить мысль 13 Октября 2013, 18:23:05:
Пока нашел только xdotool, но это тоже не то. Требуется передать приложению клавиши, не делая окно активным.

Используемые источники информации:
http://habrahabr.ru/post/149118/
http://packages.debian.org/ru/wheezy/xdotool
http://centos.name/?page/additionalresources/xdotool
https://groups.google.com/forum/#!topic/xdotool-users/oV40iJbLfJ8
http://ajc.su/unix/linux-unix/xdotool-ili-kak-sdelat-chto-to-nichego-ne-delaya/  - больше всего понравилась
« Последнее редактирование: 13 Октября 2013, 18:23:05 от A.i.D. »
Ubuntu 12.04, Centos 6.2, SAMS, SQUID, VuurMuur, ISPConfig.

Оффлайн quiet_readonly

  • Участник
  • *
  • Сообщений: 133
    • Просмотр профиля
Re: C++/C работа с другим приложением
« Ответ #3 : 14 Октября 2013, 10:27:25 »
Если надо это приложение автоматически протестировать, то можно использовать инструменты, уже встроенные в фреймворки вроде Qt: там QtTest позволяет эмулировать события ввода из модульных тестов.

Если надо взаимодействовать с существующим приложением, то есть xautomation: с ним события ввода эмулируются уже на уровне X11. Тут следует учесть две вещи:
  • X11 отделён от оконного менеджера и фокусом окон он не управляет, не факт, что получится передать событие нажатия клавиши без фокуса на окне
  • В обозримом будущем X11 могут заменить на Wayland и Mir, а они не позволят приложению эмулировать нажатия клавиш, по крайней мере без дополнительных привелегий, потому что это дыра в безопасности (одна из множества дыр в дизайне X11).

Оффлайн _XDD_

  • Участник
  • *
  • Сообщений: 108
    • Просмотр профиля
Re: C++/C работа с другим приложением
« Ответ #4 : 14 Октября 2013, 20:51:36 »
A.i.D.,
а можно использовать сигналы в другое приложение?

Оффлайн A.i.D.

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: C++/C работа с другим приложением
« Ответ #5 : 14 Октября 2013, 22:18:46 »
A.i.D.,
а можно использовать сигналы в другое приложение?
Это было бы замечательно, но пока не врубаюсь как это сделать.
Надо отслеживать события приложения, читать его память. Лучше даже использовать не сокеты, а события, и тупо повторять их по заданному алгоритму. Но блин как это сделать??
Реализация для Windows есть тут. Вопрос: как это сделать для Linux, или может есть уже готовые решения?

Если надо это приложение автоматически протестировать, то можно использовать инструменты, уже встроенные в фреймворки вроде Qt: там QtTest позволяет эмулировать события ввода из модульных тестов.
А там можно тестировать только приложения в исходниках, или ловить события уже собранной программы, а потом передавать их тоже возможно?
« Последнее редактирование: 14 Октября 2013, 22:21:49 от A.i.D. »
Ubuntu 12.04, Centos 6.2, SAMS, SQUID, VuurMuur, ISPConfig.

 

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