我在Mono中有一个应用程序创建了一个putty窗口,连接到它的PTY并通过它与世界通信。
感谢Putty我有一个完整的终端,我可以向我的应用程序发送特殊代码(如Ctrl + C,Ctrl + Z)。
我想回到我的终端,我在其中启动应用程序。我想抓住尽可能多的关键组合。这样我就能通过ssh使用我的应用程序,没有窗口弹出。
我的想法是从/ dev /中检索我当前的终端,忽略(或处理)所有可能的信号,在按下的键上轮询并转发到我的应用程序。这可以在C with P / Invoke中完成。
这是可能的,但代码却很痛苦且耗时。
我想知道它是否已经完成了?你知道任何图书馆吗?最好的选择是注册一个或两个回调,但任何使它更容易的解决方案都会很棒。
TL; DR
我需要一个可以提供我的界面的库:
event Action<byte> CharReceived;
void WriteChar(byte val);
并允许我接收ANSI终端代码作为字节序列。
根据ANSI终端规则,替代方案是将ConsoleKeyInfo
翻译为byte[]
的库。
答案 0 :(得分:1)
我发现以下项目链接非常有用。您可以下载该项目,然后查看codeproject站点上的第一条注释,了解如何将其扩展到SerialPort支持(这是我需要的)。
http://www.codeproject.com/Articles/20781/Terminal-Control-Library-C-VT100-ANSI-XTERM-SSH-Te
该项目实际上是Poderosa项目的一个薄包装,但除非你说日语,否则这个薄包装是有用的。 Poderosa项目已经支持SerialPorts,但“哥伦布 - MCSD”没有将其提升到表面。
答案 1 :(得分:0)
实际上,观察到对这种情况缺乏良好的支持(并且稍微改变了我们的要求),我们开发了自己的终端仿真器,条款:
https://github.com/antmicro/termsharp
它是基于窗口的(在XWT上运行),但可以用作库,解码VT100序列。
虽然我用我所工作的公司的产品回答我自己的问题,但它是在原始帖子之后创建的,所以我希望它是可以接受的。