【问题标题】:How to get information about contents of Qt listbox in another process如何在另一个进程中获取有关 Qt 列表框内容的信息
【发布时间】:2010-12-30 07:52:55
【问题描述】:

我有一个使用 Qt 编写的应用程序,我想读取 Qt 列表框中的数据。 它不响应 LB_GETTEXT 或其他 windows 消息,有没有从另一个进程中获取数据的好方法?

我无法访问 Qt 进程,它的外部程序。我正在寻找一种从 C# 访问 LB 内容的方法。

事实证明,Qt 的 Accessibility 插件应该为所需的操作提供支持。但是,我对 QT 不熟悉,我不清楚应用程序是否必须在允许可访问性的情况下构建,或者它是可以为任何应用程序打开和关闭的功能(或至少是默认构建应用程序,并且未明确禁用可访问性)。

我已阅读,它说您需要运行 export QT_ACCESSIBILITY=1,放置 qt.conf 文件并将可访问文件夹放入主根目录中的 Qt 应用程序。我想我不完全理解如何打开 QT_ACCESSIBILITY=1 以及它是否足以让应用程序变得可访问。我在我的计算机属性中将 QT_ACCESSIBILITY=1 添加到环境变量中,这样可以解决问题吗?或者 export QT_ACCESSIBILITY=1 是不同的。

谢谢

【问题讨论】:

  • 这是一个非常有趣的问题。你能找到有用的东西吗?我知道funqGammaRay。但它们看起来并不是黑盒 QT GUI 自动化的最佳选择。

标签: c++ qt user-interface accessibility cross-process


【解决方案1】:

你不能轻易做到这一点,因为 Qt 不使用标准的 Windows 控件来实现它的小部件,因此你不能使用标准的 Windows Api 方法(函数/消息/windows ipc)轻松访问它的内容。您将需要以某种方式破解它的内存(不是真的推荐)或使用一些支持 Qt 的 gui(测试)自动化工具,例如 Squish

LE:您可能还想通过强制加载 Qt Accessible Plug-in 来检查这个 hack 进入应用程序,然后尝试使用 Visual Studio 中包含的 Microsoft Spy++ 等常用工具进行检查。请参阅12

【讨论】:

  • 有没有办法从 Qt 应用程序访问 Qt 内容?也许他们会响应一些 Qt 跨进程消息? (如果你明白我在说什么)。也许我可以创建一个 Qt 程序,作为从我的 C# 应用程序调用到 > 我的 Qt 程序 > 对外部进程进行 Qt 调用之间的适配器?或者那也不可能
  • 不可能,只要您无权访问该应用程序源代码,因为每个 Qt IPC 方法都必须在源代码级别连接/接受和处理。
  • Oki 可能会稍等片刻,等待一些神奇的答案,并且会以悲伤的表情为您提供赏金 :) 想要一些没有太多问题的方法来施展魔法。那么 Squish Qt 版本是如何工作的呢?如果你知道(我的意思是 IT 将如何与 QT ListBox 交互)
  • 它很可能通过我上面提到的应用程序内存方法采取了这种丑陋的黑客攻击。
  • 看看qt.nokia.com/products-kr/device/qt-extended-modules/… 虽然我认为它指的是诺基亚移动 Qt 版本。
【解决方案2】:

您可能希望将进程间通信用于这些目的:http://doc.qt.io/archives/qt-4.7/ipc.html

【讨论】:

  • 感谢您的回复,但我认为我不够清楚,我不是 Qt 编写过程的创建者,我想从我的 C# 程序中使用它的外部程序,如果我理解正确的是,您的链接没有提供这样做的方法。
  • 是的,我假设您可以访问 Qt 程序 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2020-12-22
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多