【问题标题】:How do I open a program in a Win32 Console without cmd.exe?如何在没有 cmd.exe 的情况下在 Win32 控制台中打开程序?
【发布时间】:2016-07-11 01:51:51
【问题描述】:

我以前对 Windows 几乎没有经验(无论如何,对于编程而言),但认识到 Windows 拥有巨大的市场份额,我正努力在我的程序中支持它(尽管它们只是为了好玩,我喜欢假装它们'是大项目)。我编写了一个具有最少(当我说最少,我的意思是最少)功能的小外壳。

我正在尝试将其移植到 Windows 并希望在 Win32 控制台窗口中独立于 cmd.exe 使用它(这意味着 cmd.exe 的外壳部分根本没有运行,但用于它的窗口显示)。我已经完成了大部分其他移植工作,例如构建系统 (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,所以我开始想知道如何让我的 shell 独立于默认的。

【问题讨论】:

  • 您只需启动它。程序在标题中有一点说明它们是图形(即非控制台)还是控制台。要制作程序 - 在 .NET 中,开关是 /t:winexe/t:exe(控制台)。 CMD.exe 和控制台是不同的东西。 CMD 是一个控制台程序,类似于 Ipconfig。程序也共享控制台 - 如果 CMD 启动一个控制台程序并且该程序启动另一个控制台程序,那么这三个程序都在控制台中。

标签: windows cmd


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 2016-05-11
    • 2023-03-24
    • 2015-11-03
    • 2011-06-12
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多