gpt4 book ai didi

c# - 如何使用 UI 自动化检查菜单项?

转载 作者:行者123 更新时间:2023-11-30 17:51:30 26 4
gpt4 key购买 nike

我正在执行必须检查菜单项内容的操作。菜单项包含标题+快捷键(帮助F1)

screen1

但我遇到了检查菜单中是否有快捷键 (F1) 的问题。 AutomationElement 不包含有关此键的任何信息。 AccessKey 和 AcceleratorKey 为空。

enter image description here

如何通过 UI 自动化获取 accessKey?谢谢。

最佳答案

ToolStrip 类菜单的默认实现仅支持助记符。因此,例如,如果您将菜单声明为 "&help" 而不是 "help",UI Automation 应使用 "Alt+h"< 显示此菜单项 作为访问 key 。此实现不适用于其他类型的快捷方式,例如 Fx、CTRL 等。

如果您拥有被检查的应用程序,您可以提出自定义访问 key 字符串。例如,这里是一个示例类,它派生自 ToolStripMenuItem 并返回在 ShortcutKeyDisplayString 中设置的内容(注意默认情况下它是 null,即使定义了 ShortcutKeys)。

你可以这样使用它:

MyItem item = new MyItem("Help");
item.ShortcutKeys = Keys.F1;
item.ShortcutKeyDisplayString = "F1";
fileToolStripMenuItem.DropDownItems.Add(item);

这是示例类:

public class MyItem : ToolStripMenuItem
{
public MyItem(string text)
: base(text)
{
}

protected override AccessibleObject CreateAccessibilityInstance()
{
return new MyAccessibleItem(this);
}

// unfortunately we can't just derive from ToolStripMenuItemAccessibleObject
// which is stupidly marked as internal...
private class MyAccessibleItem : ToolStripDropDownItemAccessibleObject
{
public MyAccessibleItem(ToolStripMenuItem owner)
:base(owner)
{
Owner = owner;
}

public ToolStripMenuItem Owner { get; private set; }

public override AccessibleStates State
{
get
{
if (!Owner.Enabled)
return base.State;

AccessibleStates state = base.State;
if ((state & AccessibleStates.Pressed) == AccessibleStates.Pressed)
{
state &= ~AccessibleStates.Pressed;
}

if (Owner.Checked)
{
state |= AccessibleStates.Checked;
}
return state;
}
}

public override string KeyboardShortcut
{
get
{
return Owner.ShortcutKeyDisplayString;
}
}
}
}

关于c# - 如何使用 UI 自动化检查菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19297694/

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