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

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

如何修复 Ubuntu 中检测到系统程序错误的问题

如何从 closeEvent 处理使用 PyQt4 检测注销/关闭?

检测到屏幕覆盖 - 如何在屏幕覆盖应用程序中处理此问题

如何使用系统托盘/任务栏图标制作跨平台 Kivy 应用程序,即使应用程序没有聚焦/处于任务栏模式,它也会检测键盘输入

使用 Apache Thrift 时如何检测协议不匹配?