[英]How to check menu item using UI automation?
我正在努力實現必須檢查菜單項內容的操作。 菜單項包含標題+快捷鍵(幫助F1)
但是我遇到了檢查菜單中是否有快捷鍵(F1)的問題。 AutomationElement不包含有關此密鑰的任何信息。 AccessKey和AcceleratorKey為空。
如何通過UI自動化訪問accessKey? 謝謝。
ToolStrip類菜單的默認實現僅支持助記符。 例如,如果您將菜單聲明為"&help"
而不是"help"
,則UI Automation應顯示此菜單項,其中"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;
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.