如何从另一个应用程序读取 QTextEdit 内容?

How to read QTextEdit content from another application?

我目前正在尝试制作一个调试工具,它将位于专有应用程序(通过 BLE 与硬件连接)之上。

在这个应用程序(用 QT 编写)中有一个文本框,其中包含来自硬件的日志信息流,我想制作一个应用程序来监视该文本框并处理正在记录的数据.

我破解了 Spy++ 并找到了我需要的 window 的句柄,但是,它只显示为 "QWidget" 而 WM_GETTEXT 没有提取任何数据。这两个链接还提到标准 Win32 API 无法读取 QT 小部件(这对我来说很奇怪,因为我确信一切都需要通过 Windows GUI 层): 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 日志数据?

您无法阅读 QTextEdit 的内容,因为它是外星人小部件。您可以在 QWidget 文档中阅读更多内容:

Introduced in Qt 4.4, alien widgets are widgets unknown to the windowing system. They do not have a native window handle associated with them. This feature significantly speeds up widget painting, resizing, and removes flicker.

Should you require the old behavior with native windows, you can choose one of the following options:

  1. Use the QT_USE_NATIVE_WINDOWS=1 in your environment.

  2. Set the Qt::AA_NativeWindows attribute on your application. All widgets will be native widgets.

  3. Set the Qt::WA_NativeWindow attribute on widgets: The widget itself and all of its ancestors will become native (unless Qt::WA_DontCreateNativeAncestors is set).

  4. Call QWidget::winId to enforce a native window (this implies 3).

  5. Set the Qt::WA_PaintOnScreen attribute to enforce a native window (this implies 3).


还有一个 Qt 内省工具可能对您有用:GammaRay。我个人没有使用它 - 只阅读了一个小概述,但它看起来很有前途。

Qt 的小部件开箱即用地支持 辅助技术 (AT)。在 Windows,Qt 的 Accessibility is available through MSAA and IAccessible2。任何一个都能够检查小部件树,并跨进程边界传递小部件的属性。

Qt 官方支持这两种接口。