See the question and my original answer on StackOverflow

The default implementation for the ToolStrip-kind of menus just supports mnemonics. So for example, if you declare your menu as "&help" instead of "help", UI Automation should show this menu item with "Alt+h" as the Access Key. This implementation just doesn't work with other types of shortcuts, like Fx, CTRL something, etc.

If you own the inspected application, you can come up with custom access key strings. For example here is a sample class that derives from ToolStripMenuItem and returns what has been set in ShortcutKeyDisplayString (Note by default it's null, even with ShortcutKeys defined).

This is how you could use it:

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

And here is the sample class:

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;
            }
        }
    }
}