如何将UI自动化元素移动到其他位置?

时间:2012-05-02 20:42:45

标签: c# .net winapi user-interface ui-automation

我有一个C#.NET应用程序,我可以使用FromPoint函数在特定点找到AutomationElement。

现在我想操作那个AutomationElement,以便我可以将它移动到不同的位置,调整大小等。

对于移动和调整大小,我认为我可以使用SetWindowPos Window API函数,但需要目标窗口的句柄(IntPtr)。使用AutomationElement的“Current”属性,我可以读取它的NativeWindowHandle(一个int)。 由于Control也是一个窗口,我将此int值作为窗口句柄传递给SetWindowPost函数,希望它可以完成我的工作。

但代码无效。

请建议我这样做。

1 个答案:

答案 0 :(得分:0)

您要移动的元素类型是什么 - 顶级窗口或窗口中的项目?此外,这是一种用户可以使用鼠标或键盘移动的项目吗? UIAutomation只允许你操作UI与常规用户可以做的一致 - 例如,你无法使用它在对话框上移动控件。

在UIAutomation中移动内容的官方方法是查看元素是否支持Transform Pattern,然后使用Move或Resize方法适当地移动它。我认为这主要仅在顶级窗口上实现,不确定它在其他控件上的实现范围有多广 - 您可以使用UISpy / Inspect来检查目标UI。

如果元素是HWND,您还可以获取NativeWindowHandle属性 - 这是底层HWND,但您需要先将其转换为IntPtr - 然后在Win32 API中使用它。这仅适用于实际的HWND项目,不适用于列表视图中的项目。