【发布时间】:2014-02-26 17:19:03
【问题描述】:
我想创建一个 ConsoleKeyInfo 实例,该实例与在 PowerShell 会话中键入的任何左大括号匹配(我正在使用 PSReadline 进行密钥处理)。为方便起见,这里是所有涉及的键的属性
PS> while($true){ [System.Console]::ReadKey($true) }
KeyChar Key Modifiers
------- --- ---------
[ Oem4 0
] Oem6 0
{ Oem4 Shift
} Oem6 Shift
在键处理程序中,我得到了被按下的“和弦”的ConsoleKeyInfo(PSReadline 会进行过滤,所以我已经知道我只收到了Oem4 或Shift+Oem4)。我想生成匹配的ConsoleKeyInfo,以便将打印对发送到控制台。
char-
System.ConsoleKey -
bool分别用于 Shift、Alt 和 Control
我可以通过将 ConsoleKey 转换为 int 并向上移动两个来获得正确的 ConsoleKey...
PS> [System.ConsoleKey]([int]$key.Key + 2)
Oem6
我可以通过按位测试从按下的键的Modifiers 映射...
PS> ($key.Modifiers -band [System.ConsoleModifiers]::Shift) -ne 0
False
但是,我不知道如何获取此控制台键的文字 char。控制台如何从键盘键中获取字符?这只能通过现场控制台/键盘来完成吗?
我宁愿不维护密钥对的映射,也不拆分处理程序,每个“和弦”一个,并对匹配的密钥字符进行硬编码。 :(
【问题讨论】:
-
在此处查看我的“InsertPairdBraces”示例github.com/lzybkr/PSReadLine/blob/master/PSReadLine/…
标签: c# powershell console keypress