有没有一种简单的方法来检查重复的快捷键
本文关键字:方法 检查 快捷键 简单 一种 有没有 | 更新日期: 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