2013-01-11 58 views
1

我在Mono有一個應用程序,它創建一個膩子窗口,連接到它的PTY並通過它與世界進行通信。如何在C#中模擬ANSI終端?

由於膩子我有一個完整的終端,我可以發送特殊的代碼(如Ctrl + C,Ctrl + Z鍵),以我的應用程序。

我想回到我的終端,在其中我開始申請。我想抓住儘可能多的組合鍵。這樣我就可以通過ssh使用我的應用程序,沒有窗口彈出。

我的想法是檢索的/ dev /我目前的終端,忽略(或處理)所有可能的信號,在按鍵投票和轉發給我的應用程序。這可以使用P/Invoke在C中完成。

這是可能的,但代碼很痛苦且耗時。

我不知道它是否已經完成?你知道任何圖書館嗎?最好的選擇是註冊一個或兩個回調,但任何解決方案使它更容易會很好。

TL; DR

我需要,這將使我的界面就像一個圖書館:

event Action<byte> CharReceived; 
void WriteChar(byte val); 

,讓我得到ANSI終端代碼爲字節序列。

根據ANSI終端規則,替代方法是將ConsoleKeyInfo轉換爲byte[]的庫。

回答

1

我發現下面的項目鏈接非常有幫助。您可以下載該項目,然後查看codeproject站點上的第一條評論,以瞭解如何將其擴展到SerialPort支持(這是我需要的)。

http://www.codeproject.com/Articles/20781/Terminal-Control-Library-C-VT100-ANSI-XTERM-SSH-Te

該項目是真正圍繞Poderosa項目的簡單封裝,但除非你講日語,這本薄薄的包裝是非常有用的。 Poderosa項目已經支持SerialPorts,但它沒有被「Columbus-MCSD」帶到表面。

0

事實上,觀察缺乏良好的支持,爲這種情況的(並且已經改變了我們的要求一點點),我們開發了自己的終端模擬器,Termsharp:

https://github.com/antmicro/termsharp

這是窗口 - (在XWT上運行),但可用作庫,解碼VT100序列。

雖然我與我工作的公司的產品,以我自己的問題作出迴應,創建它的原職後很長一段時間,所以我希望這是可以接受的。