Как я могу извлечь текстовое содержимое из приложений с графическим интерфейсом в Linux? - PullRequest
7 голосов
/ 17 мая 2011

Я хочу извлечь текстовое содержимое из приложений с графическим интерфейсом, вот 2 примера: *

пример 1:

Предположим, я открыл Firefox и введите URL: www.google.com

как мне извлечь строку "www.google.com" из firefox, используя мое собственное приложение?

пример 2:

открыть калькулятор (используя gcalctool), затем ввести 1+1

Как я могу извлечь строку «1 + 1» калькулятора из моей собственной программы?

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

Спасибо

Ответы [ 3 ]

4 голосов
/ 17 мая 2011

Я не думаю, что есть общий способ сделать это, по крайней мере, не очень элегантный.

Некоторые неумелые идеи:

Возможно, вы сможете изменить систему X Window или даже какую-то инфраструктуру инструментария для извлечения того, что отображается в определенных элементах окна, в виде текста.

Вы можете сделать снимок экрана и использовать библиотеку OCR, чтобы преобразовать пиксели обратно в текст для интересных областей.

Вы можете перекомпилировать интересующие приложения, чтобы добавить какой-то механизм для того, чтобы задавать им вопросы.

Вы можете использовать что-то вроде xtest для вставки событий, выделяющих интересующую область и копирования их в буфер обмена.

2 голосов
/ 17 мая 2011

Я считаю, что firefox и gcalctool приведены только для примера, и вы просто хотите узнать, как в общем случае передать вывод одного приложения другому.

Есть много способов сделать это в Linux, например:

труба

application1 | application2

Кстати, вот руководство по командной строке *1010* Firefox, если вы хотите запустить Firefox в Ubuntu с URL-адресом. например:

firefox "$url"

где $ url - переменная, значение которой может быть www.mozilla.org

1 голос
/ 17 мая 2011

Звучит сложно.Предположим, что вы работаете с X11, вы можете очень легко получить изображение окна (см. «Man xwd»);однако нет простого способа получить доступ к тексту, если он не выделен и, следовательно, не скопирован в буфер обмена.

В качестве альтернативы, если вы хотите только захватить ввод пользователя, это также довольно легко сделать, активировавРасширение записи X11: поместите это в свой файл /etc/X11/xorg.conf:

Section "Module"
        Load  "record"
        #Load other modules you need ...
 EndSection

, хотя его тоже может быть сложно использовать, см. пример кода для расширения записи Xorg / X11 не удается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...