有没有一种简单的方法来检查重复的快捷键

本文关键字:方法 检查 快捷键 简单 一种 有没有 | 更新日期: 2023-09-27 17:56:01

我最近遇到了一个 Winforms 应用程序的情况,其中单个快捷键由于同一个键映射到多个控件而触发多个事件。有没有一种简单的方法可以在应用程序中搜索此类重复键?我认识到,对于不可能发生的情况,例如共享同一密钥的互斥对话框,可能会出现误报,但至少有一个起点会很好。

目前我能想到的最好的办法是在资源文件中搜索.ShortcutKeys数据,然后处理其结果,但这似乎有点过度复杂。

有没有一种简单的方法来检查重复的快捷键

尝试使用 System.Windows.Automation 库来枚举快捷方式。这是一个快速而肮脏的示例,它查看任务管理器。您必须添加对 UIAutomationClient 和 UIAutomationType 的引用。

class Program
{
    static void Main(string[] args)
    {
        Process process = Process.GetProcessesByName("taskmgr").FirstOrDefault();
        var condition = new PropertyCondition(AutomationElement.ProcessIdProperty, process.Id);
        AutomationElement window = AutomationElement.RootElement.FindFirst(TreeScope.Children, condition);
        AutomationElementCollection descendents = window.FindAll(TreeScope.Descendants, Condition.TrueCondition);
        foreach (var descendent in descendents)
        {
            var foo = descendent as AutomationElement;
            if (!string.IsNullOrWhiteSpace(foo.Current.AcceleratorKey))
                Console.WriteLine(foo.Current.AcceleratorKey);
            if (!string.IsNullOrWhiteSpace(foo.Current.AccessKey))
                Console.WriteLine(foo.Current. AccessKey);
        }
        Console.WriteLine(descendents.Count);
        Console.ReadLine();
    }
}

输出:


替代 + 空格

Alt+F

Alt+O

Alt+V

Alt+H

11