如何知道我们是在一个控制台或窗口的应用程序?

上下文:编程ac / c ++ win32-mfc库

如何知道我们是在一个控制台或窗口的应用程序?

Solutions Collecting From Web of "如何知道我们是在一个控制台或窗口的应用程序?"

您可以通过调用win32函数GetConsoleWindow来确定是否有当前连接到进程的控制台。 如果它返回NULL,那么没有控制台连接到进程。 但是,这不一定会告诉你,如果你正在运行在一个窗口的应用程序或不。 例如,我可以在启动时使用AllocConsole的窗口应用程序为调试输出分配一个控制台,在这种情况下,您将同时拥有这两个控制台。 我可以看到你所描述的另一个问题是应用程序可能没有窗口,也没有连接控制台(例如,Windows服务)。

我将不得不同意这一点上的litb和Martin。 如果你的库需要知道这个,那么它可能不够分离。 如果你正在使用这个来确定在哪里发送调试输出,例如最好的方法是使用cout或cerr,并让正在使用该库的应用程序处理将流重定向到所需的位置。

我不确定(没有自己尝试过),但是你可以调用完成STARTUPINFO结构的GetStartupInfo函数。

也许控制台和Windows应用程序不同地设置dwFlags成员的STARTF_USESHOWWINDOW标志,你可以像这样区分它们。

正如你的问题的评论中所提到的,当一个图书馆需要知道这样的事情时,这通常不是一个好兆头 – 你可以把它越好解耦。

希望有所帮助。