繁体   English   中英

c# UI自动化标签

[英]c# UI Automation label

我使用微软的 UI 自动化库已经有一段时间了,我已经能够操作文本框和按钮。 但是,我在某些控件上遇到了问题。

我有一个要自动化的程序,它有一个图片框和一个链接标签,其功能类似于单击按钮。 这意味着如果我点击图片框或链接标签,我将触发一个事件,并被定向到另一个页面。

我曾尝试使用按钮具有的 invoke 方法,但没有成功。 有没有其他方法可以触发点击事件或类似图片框或链接标签的事件?

提前致谢。

微软的 UI 自动化库: http : //msdn.microsoft.com/en-us/library/ms747327.aspx

<< 我有一个我想自动化的程序,它有一个图片框和一个链接标签,功能类似于按钮单击 >> - 这听起来像是一个图片或标签控件,它只是传递鼠标按下事件,但不是否则让系统知道它的行为就像一个按钮。 在这种情况下,您最好的选择是使用 UIAutomation 获取边界矩形,然后使用 SendInput 将鼠标移动到那里并自己执行单击。

UIAutomation 只知道如何处理标准按钮。 任何基本上是自定义按钮的东西 - 例如。 处理鼠标按下的标签 - 需要添加对一些额外接口的支持,以便告诉 UIAutomation 它可以被点击并为 Click 方法本身提供支持。

按钮有一个PerformClick()方法。

可以根据 UI 自动化更改 Winforms 控件的行为。 如果您希望一个 PictureBox 被 UI 自动化视为一个按钮,因此可以使用 UI 自动化工具点击,您可以从 PictureBox 派生并覆盖自动化/可访问方法,如下所示:

前:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        var pb = new PictureBox();
        pb.Dock = DockStyle.Fill;
        pb.Click += (s, e) => MessageBox.Show("hello world");
        Controls.Add(pb);
    }
}

这就是 Inspect(来自 SDK 工具)将其视为“窗格”的方式,没有具体操作:

在此处输入图片说明

后:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        var pb = new ButtonPictureBox();
        pb.Dock = DockStyle.Fill;
        pb.Click += (s, e) => MessageBox.Show("hello world");
        Controls.Add(pb);
    }
}

public class ButtonPictureBox : PictureBox
{
    protected override AccessibleObject CreateAccessibilityInstance() => new Accessible(this);

    private class Accessible : ButtonBase.ButtonBaseAccessibleObject
    {
        public Accessible(ButtonPictureBox control)
            : base(control)
        {
        }

        public new ButtonPictureBox Owner => (ButtonPictureBox)base.Owner;
        public override AccessibleRole Role => AccessibleRole.PushButton;
        public override AccessibleStates State => AccessibleStates.Default;
        public override void DoDefaultAction() => Owner.OnClick(EventArgs.Empty);
    }
}

现在,Inspect 将其视为一个“按钮”并且调用模式可用,因此如果您调用它,将引发 Click 方法:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM