通过串口发送“箭头键”按键

5

与通过串口发送"ENTER"键的问题类似,如何通过串口发送箭头键,尤其是向上箭头键。


1
“这个问题”?你在说哪个问题? - René Wolferink
1
任何键都由键代码定义,串行通信只是发送字节。你需要知道的是,你要发送到的设备将解释哪个代码作为向上箭头命令。因此,答案取决于你要发送到的设备。此外,René Wolferink所说的是什么问题? - Bikonja
https://dev59.com/qlPTa4cB1Zd3GeqPl77T - CarpeDiem
在通过串行端口发送键盘按键时,例如发送ENTER键可以使用WriteLine("\n\r")或serial.Write(new byte[]{13,10}, 0, 2)。那么发送向上箭头键的等效字符串/byte[]是什么? - CarpeDiem
2个回答

5

光标键是键盘的一个相对较新的功能。在选择ASCII码的时候,它们还不存在。这主要基于当时使用的电传打字机的能力。像广泛使用的ASR-33一样,它的键盘布局如下:

enter image description here

没有光标键。请注意,在 ASCII 中,换行符是一个单独的键,'\n'。这使得访问更加容易,影响了 Unix 中行尾控制字符的选择。回车键相当于现代键盘上的 Enter 键,在 ASCII 中是 '\r'。

因此,没有可供选择的光标键标准代码。你需要自己编码。ANSI 转义代码是常见的标准。DEC VT-52 和 VT-100 的仿真也非常普遍。


+1。没错,好老的VT100转义序列!Esc[nA = 将光标向上移动n行。 - Olivier Jacot-Descombes

4

由于箭头键是扫描码(不在ASCII表中定义),因此需要发送一系列字节来表示箭头键(详情请参见https://en.wikipedia.org/wiki/ANSI_escape_code)。不幸的是,这个序列可能因不同平台和目标而有所不同,因此您需要进行实验以确定正确的序列。

在Windows上的串行控制台测试Ubuntu 16.04目标,箭头向上的序列为三个字节(0x1b、0x5b、0x41),或者在键盘上:'Esc' '[' 'A'


C# 应该有预定义的键结构,可以在多个平台上兼容,而无需硬编码。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接