C# 从快捷方式获取关键点

C# 从快捷方式获取关键点,c#,winforms,C#,Winforms,除此之外,还有其他方法可以从快捷方式获取钥匙吗 sc的类型为System.Windows.Forms.Shortcut var k = (Keys)sc; 我需要为每个键使用单独的字符串,因为我使用的是ProgressABL.NETBridge(不要问),所以上面的内容不起作用 我认为sc应该是一个整数,但显然在.NET中这行代码工作得很好。快捷方式枚举值已经被仔细选择,以便与快捷方式的键枚举完全匹配。例如,ShortCut.CtrlShiftF1是0x30070,它匹配(Keys.Contr

除此之外,还有其他方法可以从快捷方式获取钥匙吗

sc的类型为
System.Windows.Forms.Shortcut

var k = (Keys)sc;
我需要为每个键使用单独的字符串,因为我使用的是ProgressABL.NETBridge(不要问),所以上面的内容不起作用


我认为sc应该是一个整数,但显然在.NET中这行代码工作得很好。

快捷方式枚举值已经被仔细选择,以便与快捷方式的键枚举完全匹配。例如,ShortCut.CtrlShiftF1是0x30070,它匹配(Keys.Control | Keys.Shift | Keys.F1):0x20000 | 0x10000 | 0x00070=0x30070。这不是意外

如果已提供将快捷方式转换为字符串,则MenuStrip中的菜单项可以自动显示MenuItem.ShortCut的字符串(如果将其ShowShortcut属性设置为True)。您可以在自己的代码中使用相同的技术,使用KeyConverter类:

    var sc = Shortcut.CtrlShiftF1;
    var txt = new KeysConverter().ConvertToString((Keys)sc);
    Console.WriteLine(txt);
输出:

Ctrl+Shift+F1组合键


我使用ABL.NET网桥解决了这个问题,方法是将System.Windows.Forms.Shortcut的值GetHashValue()的结果与KeyDown事件处理程序中的e:KeyData:GetHGashValue()进行比较。

ABL中的示例:

USING Progress.Util.TypeHelper FROM ASSEMBLY.
USING System.Enum FROM ASSEMBLY.
USING System.Windows.Forms.Keys FROM ASSEMBLY.
USING System.Windows.Forms.Shortcut FROM ASSEMBLY.

DEFINE VARIABLE ShortCut AS ShortCut NO-UNDO.
DEFINE VARIABLE Keys_ AS Keys NO-UNDO.

ShortCut = System.Windows.Forms.Shortcut:CtrlShiftF1.
Keys_ = CAST(Enum:ToObject(TypeHelper:GetType("System.Windows.Forms.Keys"), ShortCut:value__), Keys).

MESSAGE Keys_
    VIEW-AS ALERT-BOX.

我对实际问题有点不清楚。Keys是一个枚举()事实上,我也不太确定。sc是快捷方式的一个实例,显然您可以按照所描述的方式从中获取键(枚举)。。。很奇怪。嗨,迈克,这对我来说还不够。不知何故,对于区域性nl BE,Shift显示为MAJ(Windows或Infragistics bug)。所以我需要单独的按键,看看是否有一个MAJ需要用SHIFT替换。