如何检测编译程序时使用的子系统?
Posted
技术标签:
【中文标题】如何检测编译程序时使用的子系统?【英文标题】:How can I detect the subsystem used when my program was compiled? 【发布时间】:2011-10-16 09:35:51 【问题描述】:如何检测我的 Win32 / Win64 程序是用 /SUBSYSTEM:WINDOWS 还是 /SUBSYSTEM:CONSOLE 编译的?
如果预处理器方法已经存在则最好,但我也想知道如何在运行时检测它。只要检测是否有与应用关联的控制台就足够了,只要它为控制台应用返回 true。
我这样做是因为我有代码可以让控制台窗口出现以调试我的 GUI 应用程序,但我也在控制台模式下构建它们(在这种情况下我不会产生新的控制台窗口),并且不要真的很想为此创建/管理一个新的#define,因为似乎已经有一种方法可以确定这一点。
【问题讨论】:
/SUBSYSTEM:WINDOWS
是链接器,而不是编译器选项。这就是为什么你不能在编译时检测到它——太早了。
【参考方案1】:
因为在您的设置中,您希望在这两种模式下都有一个控制台,最简单的解决方案是始终调用AllocConsole
。
一个进程只能与一个控制台关联,因此如果调用进程已经有一个控制台,则 AllocConsole 函数会失败。进程可以使用 FreeConsole 函数将自己从当前控制台中分离出来,然后它可以调用 AllocConsole 来创建一个新的控制台或 AttachConsole 来附加到另一个控制台。
【讨论】:
以上是关于如何检测编译程序时使用的子系统?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测手表操作系统是不是关闭了 ios 应用程序 SWIFTUI
如何从 closeEvent 处理使用 PyQt4 检测注销/关闭?