2009-12-27 59 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文件夹中。