在Windows操作系统中隐藏C程序的控制台

4

当我运行我的应用程序时,我希望隐藏我的C控制台。我该如何让我的应用程序在后台运行?


我的应用程序包含许多不同的进程,这些进程是为了满足用户功能而存在的。但是用户只与主GUI交互,因此我想隐藏所有其他进程。 - Siddiqui
4个回答

6
默认情况下,具有main()的程序被编译为SUBSYSTEM:CONSOLE应用程序并获得控制台窗口。如果您拥有应用程序启动的其他进程,可以通过以下方法之一将它们修改为窗口化应用程序:
  • 将它们修改为使用WinMain()而不是main()。这是典型的方法,但需要修改代码。(如果使用main()的原因是为了易于访问argc/argv,MSVC为窗口应用程序提供了全局的__argc/__argv等效项)
  • 通过/SUBSYSTEM:WINDOWS /ENTRY:main参数显式指定子系统和入口点到link.exe
  • 使用Windows SDK中的editbin.exe更改子系统类型。如果您没有源代码访问权限,则可能会有所帮助。

对于GCC,-mwindows相当于/SUBSYSTEM:WINDOWS。 - a3f

2

最简单的方法是使用Windows Forms项目而不是控制台,然后隐藏启动窗体。当然,另一种选择是Windows服务,但这可能有点过头了...


0

如果我没记错的话,没有编程方式可以做到这一点。有一些选项可以实现它。我想我过去曾通过创建一个 Windows 项目来完成它,但没有 Windows Forms 代码(我只是从我的控制台应用程序中包含文件)。没有控制台窗口弹出。我相信我曾经在 Code::Blocks 中通过更改 GUI 中的选项来完成它。很抱歉我不能具体说明,但我正在使用 Visual Studio 2010 RC,我在那里的操作可能与你的不同。

你的评论让我想到你正在生成进程。这是通过你调用的函数实现的。我不知道你使用的是什么语言(我会假设是C,因为你说你正在启动一个你创建的C应用程序?),但是要么有一个标志来隐藏窗口(或者有一个标志你没有设置来不显示它),要么使用另一种方式启动进程的替代函数。尝试使用shellexecute和system()。


0

使用 CreateProcess 函数和 DETACH_PROCESS 标志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接