DirectInput 键代码 - 十六进制字符串到短
DirectInput key codes - hex string to short
我有一个包含所有字母及其 DirectInput 键码的二维数组:
string[,] DXKeyCodes = new string[,]
{
{"a","0x1E"},
{"b","0x30"},
...
};
然后我有一个函数 returns 来自数组的基于字母的十六进制键代码,如果我发送 'a' 它 returns '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);
}
...
我确定有更好的方法,但我找不到:(
感谢您的帮助。
正如itsme86和Jasen在问题评论中提到的,你应该使用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# 中,short
是 System.Int16
的别名,始终为 16 位。)
根据 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);
我有一个包含所有字母及其 DirectInput 键码的二维数组:
string[,] DXKeyCodes = new string[,]
{
{"a","0x1E"},
{"b","0x30"},
...
};
然后我有一个函数 returns 来自数组的基于字母的十六进制键代码,如果我发送 'a' 它 returns '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);
}
...
我确定有更好的方法,但我找不到:(
感谢您的帮助。
正如itsme86和Jasen在问题评论中提到的,你应该使用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# 中,short
是 System.Int16
的别名,始终为 16 位。)
根据 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);