2009-12-27 58 views
8

如何做一個殼?
- 可以運行控制檯應用程序,如FAR Manager,顏色和所有...
重定向控制檯輸出似乎不夠。
- PowerShell確實似乎沒有使用cmd.exe。如何製作外殼?

最終遊戲將創建一個圖形shell(不使用默認控制檯)。
所以從我收集,我不僅要檢索控制檯IO但攔截有關控制檯呼叫到WIN32API(如WriteConsoleOutput,SetConsoleCursorPosition,...)

+0

很好的問題CiNN,Windows的哪個版本你可能正在構建這個shell? – Russell 2009-12-28 02:03:53

+0

XP和Seven,取決於它們的行爲方式:) – CiNN 2009-12-28 02:06:30

回答

3

簡單地說,一個外殼是簡單地一個讀取命令行然後執行用戶使用某個exec()系列函數鍵入的命令的程序。如果你想支持I/O重定向,你將不得不多做一些解析命令的工作,但這並不難 - 寫一個簡單的shell通常被設置爲初學者編程練習。

+0

我想在不使用控制檯的情況下創建圖形shell。 – CiNN 2009-12-28 01:33:40

1

我不確定,但您想到的是Win32控制檯API。這是你必須調用的與角色模式控制檯窗口進行詳細交互。

如果你想要一些類似shell的東西,實際上並不是控制檯窗口,那麼你需要了解Win32管道和CreateProcess API。您將使用管道來捕獲輸出並提供輸入。

如果你想混合使用GUI應用程序,那麼如果你真的想強制他們的窗口在你的應用程序的窗口樹中,那麼你就有一個巨大的工作。

+0

我知道,我想我需要攔截那些以便我可以在我的shell中重新實現它們。 – CiNN 2009-12-28 01:32:43

0

如果您只是簡單地截取(重定向)輸出和輸入,那麼帶有圖形用戶界面的大多數DOS應用程序將不起作用。這些程序直接寫入視頻硬件或使用DOS中斷,如果您使用Windows,則需要在控制檯窗口中運行。 Windows控制檯將模擬足夠的DOS環境,以便這些類型的程序能夠正常運行。

正如Neil Butterworth所提到的,您應該使用其中一個exec函數來啓動程序。 DOS程序沒有什麼特別需要:操作系統可以通過查看可執行文件來判斷程序是Windows程序還是控制檯程序。

+0

我認爲自從Windows vista以來,dos全屏已經被刪除。 – CiNN 2009-12-28 01:31:45

+0

我指的是控制檯,而不是全屏模式。 – jdigital 2009-12-28 01:42:01

0

微軟的F# distribution中提供了一個完整但複雜的交互式外殼示例。 F#Interactive(FSI)shell的代碼位於C:\ Program Files \ FSharp-1.9.7.8 \ source \ fsharp \ Fsi文件夾中。

C中的另一個例子是TCL distribution的一部分。實現TCL命令外殼的代碼位於\ win文件夾中。