В настоящее время я пытаюсь создать инструмент отладки, который будет установлен поверх проприетарного приложения (которое взаимодействует через 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?
Поддержка виджетов Qt Вспомогательные технологии (AT) из коробки. В Windows Qt’s доступность доступно через MSAA а также IAccessible2. Любой из них способен проверять деревья виджетов и доставлять свойства виджета через границы процесса.
Любой интерфейс официально поддерживается Qt.
Вы не можете прочитать содержание QTextEdit
потому что это инопланетный виджет. Вы можете прочитать больше в QWidget документация:
Представленные в Qt 4.4, инопланетные виджеты — это виджеты, неизвестные
оконная система. Они не имеют собственного дескриптора окна
с ними. Эта функция значительно ускоряет рисование виджетов,
изменение размера и устраняет мерцание.Если вам нужно старое поведение с родными окнами, вы можете
выберите один из следующих вариантов:
Используйте QT_USE_NATIVE_WINDOWS = 1 в вашей среде.
Установите атрибут Qt :: AA_NativeWindows в вашем приложении. Все
виджеты будут родными виджетами.Установите атрибут Qt :: WA_NativeWindow для виджетов: сам виджет
и все его предки станут родными (если
Qt :: WA_DontCreateNativeAncestors установлен).Вызовите QWidget :: winId для принудительного применения собственного окна (это подразумевает 3).
Установите атрибут Qt :: WA_PaintOnScreen для принудительного использования собственного окна
(это подразумевает 3).
Также есть инструмент для самоанализа Qt, который может вам пригодиться: Гамма-луч. Лично я им не пользовался — только прочитал небольшой обзор, но выглядит многообещающе.