寻找一个 VirtualKey to real char converter 函数

Looking for a VirtualKey to real char converter function

我正在寻找一个从键盘在 RawInput 处接收一堆 VirtualKeys 的函数。一个非常类似于 C# 中的键盘记录器的软件。为了以防万一,我找了好多都找不到。

上下文

我需要的

每当我按下一个按钮时,我都希望收到它的确切值,而不仅仅是 "SPACE" 或 "OEMSEMICOLON"。我需要得到一个值为 ' ' 或 ';' 的字符或者我按什么。

简单代码

private void OnKeyPressed(object sender, RawInputEventArg e)
{
    KeysConverter kc = new KeysConverter();
    string keyChar = kc.ConvertToString(e.KeyPressEvent.VKeyName);
    Console.WriteLine("You pressed: " + e.KeyPressEvent.VKeyName);
}

来自控制台的示例

不存在具有您所有特殊性的功能。你必须建立对应 table.

最简单的方法是使用 256 个虚拟键码或扫描码构建第一个数组或枚举 table,第二个数组为您提供正确的转换 virtualKey 或扫描码到字符串键

例如

public enum Key
{
        Escape = 1,
        D1,
        D2,
        D3,
        D4,
        D5,
        D6,
        D7,
        D8,
        D9,
        D0
}


private string[] stringCodeMap = {
            "",   //key = 0,
            "",   //key = 1,
            "1",  //D1 = 2,
            "2",  //D2 = 3,
            "3",  //D3 = 4,
            "4",  //D4 = 5,
            "5",  //D5 = 6,
            "6",  //D6 = 7,
            "7",  //D7 = 8,
            "8",  //D8 = 9,
            "9",  //D9 = 10,
            "0",  //D0 = 11
}

并且您可以使用以下代码捕获字符串代码:如果扫描键是按键(虚拟键或扫描码键)的结果

string skey = stringCodeMap[(int)scankey];

对于按下的多个键,Control、shift(向左或向右)....有自己的代码