如何从其他应用程序中读取QTextEdit内容?

时间:2015-06-05 05:47:36

标签: c# c++ qt winapi spy++

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

在这个应用程序内部(用QT编写)有一个文本框,其中包含来自硬件的日志信息流,我想创建一个应用程序来监视该文本框并处理被记录的数据。 / p>

我破解了打开Spy ++并找到了我需要的窗口的句柄,但是,它只显示为" QWidget"并且WM_GETTEXT没有提取任何数据。这两个链接还提到QT小部件无法通过标准的Win32 API读取(这对我来说很奇怪,因为我确信所有需要通过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记录数据?

2 个答案:

答案 0 :(得分:4)

Qt的小工具支持辅助技术(AT)开箱即用。在Windows上,Qt的FlushFinalBlock()可通过AccessibilityMSAA获得。任何一个都能够检查小部件树,并跨进程边界提供小部件的属性。

Qt正式支持这两种界面。

答案 1 :(得分:3)

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

  

在Qt 4.4中引入,外来小部件是未知的小部件   窗口系统。它们没有关联的本机窗口句柄   跟他们。此功能显着加快了小部件绘画,   调整大小,并消除闪烁。

     

如果您需要使用本机窗口的旧行为,则可以   选择以下选项之一:

     
      
  1. 在您的环境中使用QT_USE_NATIVE_WINDOWS = 1.

  2.   
  3. 在应用程序上设置Qt :: AA_NativeWindows属性。所有   小部件将是本机小部件。

  4.   
  5. 在小部件上设置Qt :: WA_NativeWindow属性:小部件本身   并且它的所有祖先都将成为原生(除非   设置Qt :: WA_DontCreateNativeAncestors。

  6.   
  7. 调用QWidget :: winId强制执行本机窗口(这意味着3)。

  8.   
  9. 设置Qt :: WA_PaintOnScreen属性以强制执行本机窗口   (这意味着3)。

  10.   

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