0

我被要求创建一个小工具来帮助自动化基本的 3rd 方 WinForms 应用程序。

到目前为止,我已经设法克服了许多障碍,但这是迄今为止最令人沮丧的障碍之一(花了 8 个小时研究才发现 LVM_GETITEMTEXT 正在返回一个带有 64 位指针的 LVITEM 结构非常令人沮丧) -我似乎根本找不到任何方法来获得对第三方应用程序 StatusStrip 中 ToolStrupStatusLabel 的任何类型的引用。

我知道应用程序已完成分配的任务的唯一迹象是 StatusStrip 何时更新以显示它已完成。如果我无法确定它何时完成一项工作并继续进行另一项工作,我就无法可靠地自动化它的操作。

是否有任何消息可以 SendMessage() 到应用程序?我可以调用任何函数吗?有什么可以帮助我找到此标签上的文本,以便我可以深入了解应用程序的状态?

自动化工具在 C#/Winforms 中使用 pInvoke 进行编程,以实现各种 Windows 功能。我还在 C++ 中创建了自己的 DLL,以帮助从 LVITEM 结构中获取数据,因此 C++ 变通办法也是可能的。

4

1 回答 1

2

这是行不通的。ToolStripItem 派生类是特殊的,它们不是从 Control 派生的。他们没有自己的窗口句柄,他们使用宿主的窗口来绘制自己。主机是控件,例如您的情况下的 ToolStrip 或 StatusStrip。

这使得它们无法从需要窗口句柄的传统 UI 自动化工具中使用。征服它们的唯一方法是注入一个使用反射来获取 ToolStripItem 引用的 DLL。这存在,Managed Spy++ 工具使用这种技术。提供了源代码,因此您可以将自己的源代码放在一起,您需要利用 ManagedSpyLib 来完成繁重的工作。

于 2012-08-12T14:08:15.960 回答