Как читать содержимое QTextEdit из другого приложения?

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

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

Я взломал Spy ++ и нашел нужные мне дескрипторы окна, однако оно отображалось только как «QWidget», а WM_GETTEXT не извлекал никаких данных. В этих двух ссылках также упоминается, что виджеты QT не могут быть прочитаны стандартным Win32 API (что мне кажется странным, так как я был уверен, что все необходимое для прохождения через уровень графического интерфейса Windows):
https://forum.qt.io/topic/36867/accessing-qtextedit-from-another-program/9
https://forum.qt.io/topic/19256/how-get-handle-of-qwidget-child-with-vb-net/9

Я открыт для любых вариантов! Я не зависим от языка в этом. Как я могу прочитать данные журнала QTextEdit?

0

Решение

Поддержка виджетов Qt Вспомогательные технологии (AT) из коробки. В Windows Qt’s доступность доступно через MSAA а также IAccessible2. Любой из них способен проверять деревья виджетов и доставлять свойства виджета через границы процесса.

Любой интерфейс официально поддерживается Qt.

4

Другие решения

Вы не можете прочитать содержание QTextEdit потому что это инопланетный виджет. Вы можете прочитать больше в QWidget документация:

Представленные в Qt 4.4, инопланетные виджеты — это виджеты, неизвестные
оконная система. Они не имеют собственного дескриптора окна
с ними. Эта функция значительно ускоряет рисование виджетов,
изменение размера и устраняет мерцание.

Если вам нужно старое поведение с родными окнами, вы можете
выберите один из следующих вариантов:

  1. Используйте QT_USE_NATIVE_WINDOWS = 1 в вашей среде.

  2. Установите атрибут Qt :: AA_NativeWindows в вашем приложении. Все
    виджеты будут родными виджетами.

  3. Установите атрибут Qt :: WA_NativeWindow для виджетов: сам виджет
    и все его предки станут родными (если
    Qt :: WA_DontCreateNativeAncestors установлен).

  4. Вызовите QWidget :: winId для принудительного применения собственного окна (это подразумевает 3).

  5. Установите атрибут Qt :: WA_PaintOnScreen для принудительного использования собственного окна
    (это подразумевает 3).


Также есть инструмент для самоанализа Qt, который может вам пригодиться: Гамма-луч. Лично я им не пользовался — только прочитал небольшой обзор, но выглядит многообещающе.

3

По вопросам рекламы [email protected]