我正在寻找一个可以从键盘在RawInput接收一堆VirtualKey的函数。与C#中的键盘记录程序非常相似的软件。以防万一,我搜索了该死的很多东西,什么也找不到。
上下文
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);
}
控制台中的示例
答案 0 :(得分:1)
具有您所有特点的功能不存在。您必须建立对应表。
简单的方法是使用256个虚拟键码或scancode构建第一个数组或枚举表,而第二个数组为您提供正确的将virtualKey或scancode转换为字符串键的
例如
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
}
您可以使用:捕获字符串代码,如果scankey是按下键(虚拟键或scancode键)的结果
string skey = stringCodeMap[(int)scankey];
对于按下的多个键,控制,Shift(向左或向右)...都有自己的代码