如何制作外壳?
- 可以使用颜色和所有...运行控制台应用程序,如FAR Manager
重定向控制台输出似乎不够
- PowerShell似乎没有使用cmd.exe。
最终游戏将是创建一个图形shell(不使用默认控制台)。
所以从我收集的内容来看,我不仅要检索控制台IO,还要拦截关于控制台的Win32Api调用(如WriteConsoleOutput,SetConsoleCursorPosition,...)
答案 0 :(得分:3)
最简单的说,shell只是一个程序,它读取命令行,然后执行用户使用exec()系列函数键入的命令。如果你想支持I / O重定向,你将需要做更多的工作来解析命令,但这并不难 - 写一个简单的shell经常被设置为初学者编程练习。
答案 1 :(得分:1)
我不确定,但你想到的是Win32控制台API。这是您必须调用以与字符模式控制台窗口进行详细交互的内容。
如果你想要一些类似shell的东西,实际上是一个控制台窗口,那么你需要了解Win32管道和CreateProcess
API。您将使用管道捕获输出并输入输入。
如果你想混合使用GUI应用程序,那么如果你真的想迫使他们的窗口进入你应用程序的窗口树,你就会有一个巨大的工作。
答案 2 :(得分:0)
如果只是截取(重定向)输出和输入,大多数带有图形用户界面的DOS应用程序将无法工作。这些程序直接写入视频硬件或使用DOS中断,如果您使用的是Windows,则需要在控制台窗口中运行。 Windows控制台将模拟足够的DOS环境,以便这些类型的程序能够正常运行。
正如Neil Butterworth所提到的,你应该使用其中一个exec函数来启动程序。 DOS程序没有什么特别之处:如果程序是Windows程序或控制台程序,操作系统可以通过查看可执行文件来判断。
答案 3 :(得分:0)
Microsoft的F# distribution中提供了一个完整但复杂的交互式shell示例。 F#Interactive(FSI)shell的代码位于C:\ Program Files \ FSharp-1.9.7.8 \ source \ fsharp \ Fsi文件夹中。
C中的另一个示例作为TCL distribution的一部分提供。实现TCL命令shell的代码位于\ win文件夹中。