寻找一个 VirtualKey to real char converter 函数
Looking for a VirtualKey to real char converter function
我正在寻找一个从键盘在 RawInput 处接收一堆 VirtualKeys 的函数。一个非常类似于 C# 中的键盘记录器的软件。为了以防万一,我找了好多都找不到。
上下文
- 我使用 KeyPressed 捕获事件。
- 要读取 VKey 值,请从
e.KeyPressEvent.VKeyName
访问它。
- 对于字母字符工作正常,
'A'->'A', 'B'->'B' and so on
。
- 其余字符不会,情况是:
- 一个组合键字符(这意味着我必须在键盘上按下多个键才能创建它们),例如
'@'->'AltGr + 2' or '$'->'Shift+5'
.
- 一个简单的数字。每当我按任何数字时:
'2' -> 'D2'
.
- 当我按下
' ' -> SPACE
时出现的特殊字符。
我需要的
每当我按下一个按钮时,我都希望收到它的确切值,而不仅仅是 "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(向左或向右)....有自己的代码
我正在寻找一个从键盘在 RawInput 处接收一堆 VirtualKeys 的函数。一个非常类似于 C# 中的键盘记录器的软件。为了以防万一,我找了好多都找不到。
上下文
- 我使用 KeyPressed 捕获事件。
- 要读取 VKey 值,请从
e.KeyPressEvent.VKeyName
访问它。 - 对于字母字符工作正常,
'A'->'A', 'B'->'B' and so on
。 - 其余字符不会,情况是:
- 一个组合键字符(这意味着我必须在键盘上按下多个键才能创建它们),例如
'@'->'AltGr + 2' or '$'->'Shift+5'
. - 一个简单的数字。每当我按任何数字时:
'2' -> 'D2'
. - 当我按下
' ' -> SPACE
时出现的特殊字符。
- 一个组合键字符(这意味着我必须在键盘上按下多个键才能创建它们),例如
我需要的
每当我按下一个按钮时,我都希望收到它的确切值,而不仅仅是 "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(向左或向右)....有自己的代码