2010-04-15 125 views
2

我正在開發控制檯應用程序。我需要模擬命令行實用程序時按下F7鍵的行爲,如下面所示的方式:控制檯應用程序模擬命令行

alt text

是否有可能在C#2008?如果沒有,是否有任何解決方法可用?

任何幫助非常讚賞。

+2

我很嫉妒。 *我的* F7不這樣做...... – 2010-04-15 05:37:24

+0

這種類型的UI傳統上是通過直接尋址與顯卡的文本模式相對應的視頻RAM來創建的。過去有大量的圖書館來建立菜單,繪製窗口等等。主要是他們應該在現代Windows下工作,但是我很長時間沒有推薦任何特定的東西。如果一個熱鍵(例如F7)激活菜單,您可能正在查看一個TSR(終止並保持駐留)程序......一個在DOS下啓動,鉤住鍵盤並退出但仍留在內存中等待特定按鍵。 – 2010-04-15 05:40:48

+0

@Eric J. - 令人驚訝的是Windows NT一直支持控制檯中的TSR:http://support.microsoft.com/kb/101921 - 但是今天使用這個API會很瘋狂 - 你會寫一個16-僅限於訪問大約0.025%的現代PC內存。事實上,我不知道是否有人曾經在Windows NT或更高版本上運行過TSR。沒有多少公司需要運行16位Windows應用程序。 – 2010-04-15 05:57:39

回答

0

在Windows上有一個用於編寫「控制檯模式」應用程序的完整API。它允許您以事件驅動的方式監聽鼠標或鍵盤輸入,還可以設置文本的前景和背景顏色,定位光標等。

要製作一個類似CMD.EXE所顯示的盒子,你使用某些特殊字符來製作邊框(有各種角落和邊緣碎片 - 使用Character Map應用程序來查看它們)。

要使用C#中的Console API,您可能需要使用pinvoke,例如,

[DllImport("kernel32.dll")] 
public static extern bool SetConsoleTextAttribute(
          IntPtr hConsoleOutput, int wAttributes); 

請參閱文檔SetConsoleTextAttribute以瞭解如何使用它來設置顏色。

1

我不確定.NET是否包含它們的包裝器,或者是否必須通過P/Invoke來使用它們,但是Win32 API包含這些功能。例如,您可以使用ReadConsoleOutput來讀取您要遮掩的顯示屏的區塊。然後你會使用WriteConsoleOutput來顯示你的列表(包括邊框)。覆蓋圖完成後,您可以通過WriteConsoleOutput的另一個調用恢復以前的內容,指定保存底層數據的塊。

編輯:做一個快速檢查,正確的功能不會跳出來反正我。也許我錯過了一些顯而易見的東西......

+0

+1。非常感謝 - 您的方法也適用於我。 – 2010-04-16 03:55:56

相關問題