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

C# 如何从其他应用程序读取QTextEdit内容?,c#,c++,qt,winapi,spy++,C#,C++,Qt,Winapi,Spy++,我目前正在尝试制作一个调试工具,它将位于通过BLE与硬件接口的专有应用程序之上 在这个用QT编写的应用程序中,有一个文本框,其中包含来自硬件的日志信息流,我想制作一个应用程序,它将监视该文本框并处理记录的数据 我破解了open Spy++并找到了我需要的窗口句柄,但是,它只显示为QWidget,WM_GETTEXT没有提取任何数据。这两个链接还提到,标准Win32 API无法读取QT小部件,这让我感到奇怪,因为我确信需要通过Windows GUI层的所有内容: 我愿意接受任何和所有的选择!在这

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

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

我破解了open Spy++并找到了我需要的窗口句柄,但是,它只显示为QWidget,WM_GETTEXT没有提取任何数据。这两个链接还提到,标准Win32 API无法读取QT小部件,这让我感到奇怪,因为我确信需要通过Windows GUI层的所有内容:


我愿意接受任何和所有的选择!在这件事上我是语言不可知论者。如何读取QTextEdit日志数据?

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

Qt4.4中引入的外来小部件是用户不知道的小部件 窗口系统。它们没有关联的本机窗口句柄 和他们在一起。此功能显著加快了小部件的绘制速度, 调整大小,并删除闪烁

如果您需要本机windows的旧行为,您可以 选择以下选项之一:

在您的环境中使用QT\u Use\u NATIVE\u WINDOWS=1

在应用程序上设置Qt::AA_NativeWindows属性。全部的 小部件将是本机小部件

在小部件上设置Qt::WA_NativeWindow属性:小部件本身 它的所有祖先都将成为本地人,除非 Qt::WA_DontCreateNativeAncestors已设置

调用QWidget::winId强制执行本机窗口,这意味着3

设置Qt::WA_PaintOnScreen属性以强制使用本机窗口 这意味着3

此外,Qt还有一个自省工具,可能对您有用:。就个人而言,我没有使用它——只阅读了一个小的概述,但它看起来很有希望。

Qt的小部件支持开箱即用的辅助技术。在Windows上,Qt通过和提供。任何一个都能够检查小部件树,并跨流程边界交付小部件的属性


Qt正式支持这两个接口。

Err。。。我不知道为什么您希望能够通过访问任意代码实现的Qt小部件的窗口句柄来读取数据。你可能会看到:Sikuli会自动处理你在屏幕上看到的任何东西。它使用图像识别来识别和控制GUI组件。当无法轻松访问GUI的内部或源代码时,它非常有用。但我认为与代码开发人员交谈以提供某种钩子也是值得的,而不是花费大量开发人员时间以不稳定的方式完成这些任务。。。!看看这个工具——对于一个小部件来说,没有特别的要求,它需要有一个本机窗口来支持,以便从另一个进程访问它。它只需要实现启用所需的接口。顺便说一句,Qt对其所有窗口小部件(无论是否外来)都会执行此操作。@IInspectable不会在应用程序上设置Qt::AA_NativeWindows属性。所有小部件都将是本机小部件如果属性设置为?也许不是所有的小部件都有本机控件的支持,但据我所知,文档说明它们是理论上的。你不需要回到传统的实现。OP所需的一切都已可用,正如我在前面的评论和评论中指出的那样。@ixSci首先,您提出的更改具有很强的侵入性,开发人员可能不想这样做,这是有充分理由的。或者询问者甚至无法控制应用程序进行更改。但真正的问题是,利用窗口句柄进行黑客攻击并不是实现自动化的方法。没有任何理由让窗口小部件被窗口化,当今的主要UI框架使用非窗口小部件。所以,按照大自然的意图使用平台自动化设施。@DavidHeffernan,我没有说它好,也没有打算使用它。我只是简单地回答了为什么基于Qt的应用程序不可监视的问题。不管好坏,回退到本机小部件的可能性是存在的,对我来说,了解它是件好事。我以前见过一两次提到MSAA,但我没有看到任何用于此目的的示例。我会深入研究这一点。。我假设有一些UI自动化系统是建立在这个基础上的。