我正在实施的行动,必须检查菜单项的内容。菜单项包含标题+快捷键(help F1)

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

如何通过UI自动化访问accessKey?谢谢。
发布于 2013-10-10 22:56:09
ToolStrip类菜单的默认实现只支持助记符。因此,例如,如果您将菜单声明为"&help"而不是"help",UI自动化应该以"Alt+h"作为访问键显示此菜单项。这种实现方式不适用于其他类型的快捷键,如Fx、CTRL等等。
如果您拥有被检查的应用程序,则可以提出自定义的访问密钥字符串。例如,下面是一个示例类,它从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;
}
}
}
}https://stackoverflow.com/questions/19297694
复制相似问题