我被要求创建一个小工具来帮助自动化基本的第三方WinForms应用程序。
到目前为止,我已经设法克服了许多障碍,但这是迄今为止最令人沮丧的障碍之一(花了8个小时研究才发现LVM_GETITEMTEXT正在返回带有64位指针的LVITEM结构非常令人沮丧的) - 我似乎无法找到任何方式在第三方应用程序的StatusStrip中获得对ToolStrupStatusLabel的任何引用。
我的唯一指示是应用程序已完成其分配的任务,即更新StatusStrip以显示它已完成。如果我不知道什么时候完成一项工作并继续到另一项工作,我就无法可靠地自动化它的操作。
我可以将SendMessage()传递给应用程序吗?我可以打电话的任何功能?有什么能帮我找到这个标签上的文字,这样我才能对应用程序的状态有所了解吗?
自动化工具使用pInvoke在C#/ Winforms中编程,用于各种Windows功能。我还用C ++创建了自己的DLL,以帮助从LVITEM结构中获取数据,因此也可以使用C ++解决方法。
答案 0 :(得分:2)
这不起作用。 ToolStripItem派生类是特殊的,它们不是从Control派生的。他们没有自己的窗口句柄,他们使用主持人的窗口来绘制自己。主机是控件的地方,例如你的情况下的ToolStrip或StatusStrip。
这使得它们无法使用需要窗口句柄的传统UI自动化工具。命令它们的唯一方法是注入一个使用反射来获取ToolStripItem引用的DLL。这是存在的,Managed Spy++ tool使用这种技术。提供源代码以便您可以将自己放在一起,您将希望利用ManagedSpyLib来完成繁重的工作。