如何在没有cmd.exe的情况下在Win32控制台中打开程序?

时间:2016-07-11 01:51:52

标签: windows cmd

我以前很少使用Windows(无论如何都是编程),但是我认识到Windows拥有巨大的市场份额,我试图在我的程序中支持它(尽管它们只是为了好玩,我喜欢假装它们'大项目)。我写了一个很小的shell(当我说最小的,我的意思是最小的)功能。

我正在尝试将其移植到Windows,并希望在Win32控制台窗口中独立于cmd.exe使用它(意味着cmd.exe的shell部分根本没有运行,但是用于它的窗口显示)。我已经完成了大部分其他移植工作,例如构建系统(CMake),并在#define中将适当的Unix系统调用更改为Windows。然而,我做了一些研究,并没有发现这个主题。我知道这是可能的,因为我已经看到它与Bash完成了。当我在GUI中运行程序时,Visual Studio也习惯这样做。

参考文章我从https://en.wikipedia.org/wiki/Win32_console

获得了一些信息

注意:我的意思是当你点击它并打开它而不在自己的小控制台窗口中运行cmd时。或者当您将其键入cmd时,它将在未运行cmd的单独窗口中打开。我假设cmd.exe和它运行的控制台窗口是两个单独的东西,但如果我错了,请让我知道。 :)

这个问题的灵感来自https://askubuntu.com/questions/111144/are-terminal-and-shell-the-same和类似的问题,我得到了维基百科的链接。有人说控制台窗口和外壳是分开的。我正在编写自己的shell,所以我开始想知道如何使我独立于默认shell。

1 个答案:

答案 0 :(得分:0)

Win32控制台和cmd.exe是两回事。当启动需要的程序时,Windows会自动打开控制台窗口。它决定是否通过硬连接到可执行文件的交换机来做到这一点。这个窗口将运行所述程序。如果启动该过程的程序在控制台窗口中运行,则两个程序将共享该控制台窗口。

正如Noodles所说,它真的很简单。你刚开始吧。双击它就可以了。传递给它的CREATE_NEW_CONSOLE的CreateProcess()函数将执行它。使用

从cmd.exe运行该程序
start <command>

会这样做。

Windows API中还有一系列函数,称为FreeConsole()和AllocConsole(),它们将分别从当前控制台释放程序并为其创建一个新的控制台。

参考链接(由Noodles提供):https://msdn.microsoft.com/en-us/library/windows/desktop/ms682010(v=vs.85).aspx