簡體   English   中英

如何使用UI自動化檢查菜單項?

[英]How to check menu item using UI automation?

我正在努力實現必須檢查菜單項內容的操作。 菜單項包含標題+快捷鍵(幫助F1)

屏幕截圖1

但是我遇到了檢查菜單中是否有快捷鍵(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM