gpt4 book ai didi

c# - 如何获取在特定点接收鼠标点击的 Control/Windows Handle/AutomationElement?

转载 作者:行者123 更新时间:2023-11-28 08:19:24 26 4
gpt4 key购买 nike

我试图在我给出的特定屏幕坐标处获得控件。现在我想知道哪个控件会收到鼠标单击。 (该控件位于 UI 自动化场景中的另一个应用程序中。)

另外,让我说一下,Control、Windows Handle 和 AutomationElement 对我来说都是一样的,因为它们或多或少很容易相互转换(除了我认为在不同进程中不起作用的 Control 之外) ).

有一些明显的函数,如 WindowFromPoint 和 AutomationElement.FromPoint,但都失败了,返回了一些似乎(无形地)自定义绘制在顶部的元素。不过,我知道鼠标点击会转到我想要的控件。那么..有没有办法找出鼠标点击的真正位置?也许或者找出元素是否通过鼠标点击?

非常感谢安德烈亚斯

最佳答案

如果您处于单击控件会将焦点切换到它的情况下,您可以使用 AutomationFocusChangeEventHandler检索当前接收焦点的 AutomationElement。然后你可以注册一个方法来处理焦点改变的事件:

AutomationFocusChangedEventHandler focusHandler = null;

/// <summary>
/// Create an event handler and register it.
/// </summary>
public void SubscribeToFocusChange()
{
focusHandler = new AutomationFocusChangedEventHandler(OnFocusChange);
Automation.AddAutomationFocusChangedEventHandler(focusHandler);
}

/// <summary>
/// Handle the event.
/// </summary>
/// <param name="src">Object that raised the event.</param>
/// <param name="e">Event arguments.</param>
private void OnFocusChange(object src, AutomationFocusChangedEventArgs e)
{
AutomationElement focusedElement = src as AutomationElement;

// TODO Add event handling code.
// The arguments tell you which elements have lost and received focus.
}

/// <summary>
/// Cancel subscription to the event.
/// </summary>
public void UnsubscribeFocusChange()
{
if (focusHandler != null)
{
Automation.RemoveAutomationFocusChangedEventHandler(focusHandler);
}
}

关于c# - 如何获取在特定点接收鼠标点击的 Control/Windows Handle/AutomationElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6491832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com