c#如何将char转换为VirtualKeyCode?

时间:2018-08-24 19:14:04

标签: c#

我一直在这里看,但是通常的问题是“如何将virtualkey转换为char”。 所以我需要问如何将char转换为virtualkeycode?

我可以很好地使用F1,Ctrl等,但是却不知道如何以某种方便的方式将A转换为VK_A等。

我正在尝试让外部配置文件保存一些变量,然后这些变量必须在实际应用中用作虚拟键码。

我可以识别像

这样的货币对
  Alt+F2, Shift+Control+F1 ... etc.

因为它们只是枚举0-12,然​​后是VirtualKeyCode.F1 +索引

但是我不知道这些

  Alt+F, Shift+Control+A ... etc.

我可能缺少了一些非常简单的内容,但不幸的是我看不到它。

谢谢

编辑:

感谢您的帮助,我现在可以使用这段代码将“ Ctrl + X”或“ Shift-A”转换为VirtualKeyCode(仍然更像是测试代码)

    public static void ParseKeys(string text)
    {
        Key key = 0;           
        Key mod = 0;
        int current = 0;
        string[] result;
        string[] separators = new string[] { "+", "-" };
        result = text.Split(separators, StringSplitOptions.RemoveEmptyEntries);

        foreach (string entry in result)
        {
            if (entry.Trim() == Keys.Control.ToString() || entry.Trim() == "Ctrl")
                mod = Key.LeftCtrl;

            if (entry.Trim() == Keys.Alt.ToString())
                mod = Key.LeftAlt;

            if (entry.Trim() == Keys.Shift.ToString())
                mod = Key.LeftShift;

            if (entry.Trim() == Keys.LWin.ToString() && current != result.Length - 1)
                mod = Key.LWin;

            current++;
        }

        KeysConverter keyconverter = new KeysConverter();
        key = (Key)keyconverter.ConvertFrom(result.GetValue(result.Length - 1));

        var vmod = KeyInterop.VirtualKeyFromKey(mod);

        System.Diagnostics.Trace.WriteLine((VirtualKeyCode)vmod + " = " + (VirtualKeyCode)key);

    }

用法

    ParseKeys("Alt+X");

我发现我需要处理“ Alt + Ctrl + X”或“ Ctrl + X + Q”之类的组合,但实际上此代码适用于A + B组合。最后有人可以提出一些优雅的解决方案吗?

    VirtualKeyCode[] outsequence = { VirtualKeyCode.A , VirtualKeyCode.B, VirtualKeycode.C } 

? 谢谢!

0 个答案:

没有答案