首页 文章

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

提问于
浏览
1

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

我正在尝试将其移植到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

    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

相关问题