如何检测编译程序时使用的子系统?

时间:2011-10-16 09:35:52

标签: c++ windows visual-studio

如何检测我的Win32 / Win64程序是用/ SUBSYSTEM编译的:WINDOWS,还是/ SUBSYSTEM:CONSOLE?

预处理器方法如果已经存在则最好,但我也想知道如何在运行时检测它。仅检测是否存在与应用程序关联的控制台就足够了,只要它为控制台应用程序返回true即可。

我这样做是因为我有代码来显示调试我的GUI应用程序的控制台窗口,但我也在控制台模式下构建它们(在这种情况下我不会产生新的控制台窗口),而不是当看起来已经有办法确定这个时,我真的想为此制作/管理一个新的#define。

1 个答案:

答案 0 :(得分:3)

由于在您的设置中您希望在两种模式下都使用控制台,因此最简单的解决方案是始终呼叫AllocConsole

  

进程只能与一个控制台关联,因此如果调用进程已有控制台,则AllocConsole函数将失败。进程可以使用FreeConsole函数将其自身与当前控制台分离,然后它可以调用AllocConsole来创建新控制台或AttachConsole以附加到另一个控制台。