C# UI自动化,如何获取底层GUI对象?

C# UI自动化,如何获取底层GUI对象?,c#,automation,ui-automation,C#,Automation,Ui Automation,我在大部分测试中都使用UI自动化(COM包装器)框架,但我遇到了一个无法看到内部控件的控件,我根本不想单击(60100) 我想知道是否有一种简单的方法可以让物体自身 我想使用Control.FromHandle()之类的东西,但由于我的应用程序与测试不在同一PID中,因此返回null 我想我可能必须使用注入,但我不知道是否可以将GUI对象传递回我的主线程(从注入的线程) 如果有帮助的话,我相信控件是一个列表栏(来自infragistics) 如Brendan所说,您可以获得then句柄(HWND

我在大部分测试中都使用UI自动化(COM包装器)框架,但我遇到了一个无法看到内部控件的控件,我根本不想单击(60100)

我想知道是否有一种简单的方法可以让物体自身

我想使用Control.FromHandle()之类的东西,但由于我的应用程序与测试不在同一PID中,因此返回null

我想我可能必须使用注入,但我不知道是否可以将GUI对象传递回我的主线程(从注入的线程)

如果有帮助的话,我相信控件是一个列表栏(来自infragistics)


如Brendan所说,您可以获得then句柄(HWND/IntPtr),然后将Win32SDK的所有优点与该句柄一起使用

我自己也有一些场景,e。G某些工具栏不会通过UIAutomation公开它们的子工具栏,但是通过(复杂的)SDK调用,您仍然可以获得它们

请注意,最简单也是最漂亮(虽然不是100%可靠)的解决方案是使用相对于父控件的屏幕坐标。通常情况下,孩子们不会改变他们的位置,因此99.99%的时候一切都正常


可靠性稍差,速度快得多(运行时慢一点,开发时间长一点)。

正如Brendan所说,您可以获得then句柄(HWND/IntPtr),然后将Win32SDK的所有优点与该句柄一起使用

我自己也有一些场景,e。G某些工具栏不会通过UIAutomation公开它们的子工具栏,但是通过(复杂的)SDK调用,您仍然可以获得它们

请注意,最简单也是最漂亮(虽然不是100%可靠)的解决方案是使用相对于父控件的屏幕坐标。通常情况下,孩子们不会改变他们的位置,因此99.99%的时候一切都正常

可靠性稍差,速度快得多(运行时慢一点,开发时间长一点)。

您可以使用该属性从AutomationElement获取HWND。但这取决于你在这方面做得更多。如果HWND是另一个进程中的ActiveX控件,则可能没有简单的方法获取附加到它的COM对象。您可以使用该属性从AutomationElement获取HWND。但这取决于你在这方面做得更多。如果HWND是另一个进程中的ActiveX控件,则可能没有简单的方法获取附加到它的COM对象。