【问题标题】:DirectInput key codes - hex string to shortDirectInput 键码 - 短十六进制字符串
【发布时间】:2018-07-27 22:03:12
【问题描述】:

我有一个包含所有字母及其 DirectInput 键码的二维数组:

string[,] DXKeyCodes = new string[,]
{
    {"a","0x1E"},
    {"b","0x30"},
    ...
};

然后我有一个函数从数组中返回基于字母的十六进制键代码,如果我发送'a'它返回'0x1E'。

然后,这个键码会作为按键发送到外部程序,该函数需要将键码指定为短键,但我的数组包含字符串。

如何将这种字符串转换为短字符串?

例如,这是可行的,但当然,总是发送相同的密钥代码:

Send_Key(0x24, 0x0008);

我需要这样的东西才能工作,这样我就可以发送任何给定的密钥代码:

Send_Key(keycode, 0x0008);

我尝试了以下方法,但它也不起作用,只是让我的应用程序崩溃。

Send_Key(Convert.ToInt16(keycode), 0x0008);

我真的不想去这样的地方

if (keycode == "a")
{  
    Send_Key(0x1E, 0x0008);
}
else if (keycode == "b")
{  
    Send_Key(0x30, 0x0008);
}
...

我确定有更好的方法,但我找不到:(

感谢您的帮助。

【问题讨论】:

  • 显而易见的问题是:为什么首先将十六进制值存储为字符串而不是短裤?另一个问题是:你为什么不用字典?
  • 听起来像Dictionary<string, short>
  • 哦...只是因为我不知道字典是什么并且我可以使用它:) 听起来这是一个非常愚蠢的问题,很容易解决...我会立即尝试...谢谢大家
  • 谁带来了石头?也不要抱怨被否决,拜托!有人可能有充分的理由。例如,在几个地方阅读您的问题非常容易......
  • 嗯,避免被否决的一种方法是学习语言。有大量免费资源可以教你如何做这些事情。相反,您在这里提出非常基本的问题,您的期望是我们有耐心和理解。我们的理解是,您不必费心花时间阅读,而是采取简单的方法戳它,如果您无法弄清楚,您可以问陌生人。

标签: c# string hex short directinput


【解决方案1】:

正如itsme86 和Jasen 在问题cmets 中提到的,您应该使用a Dictionary<string, short> instead of a 2D array。这样,您可以通过键查找值(而不必在要查找相应值时遍历数组来搜索键),并且您不必对字符串进行任何转换。例如,

Dictionary<string, short> DXKeyCodes = new Dictionary<string,short>
{
  {"a", 0x1E},
  {"b", 0x30}
};
short theValue = DXKeyCodes["a"]; // don't need to loop over DXKeyCodes
                                  // don't need to convert from string

如果出于某种原因您必须将这些值存储为字符串,则使用静态方法Convert.ToInt16(string, int)

short convertedValue = Convert.ToInt16("0x30", 16);

(在 C# 中,shortSystem.Int16 的别名,并且始终为 16 位。)

【讨论】:

    【解决方案2】:

    根据 DirectInput 文档,API 有一个Key enumeration

    因此,您可以像这样填充您的dictionary

    var DXKeyCodes = new Dictionary<string,short>
    {
       { "a", (short)Microsoft.DirectX.DirectInput.Key.A }, // enum value of A is 30 which == 0x1E
       { "b", (short)Microsoft.DirectX.DirectInput.Key.B }
    };
    

    用法:

    Send_Key(DXKeyCodes[keycode], 0x0008);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2010-10-04
      • 2014-03-07
      • 2017-01-01
      • 2019-07-27
      • 2020-11-11
      • 1970-01-01
      相关资源
      最近更新 更多