diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index fe1827ef578..4d37894f353 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -576,9 +576,27 @@ QString qAppName() return QCoreApplication::instance()->d_func()->appName(); } +#ifdef Q_OS_WINDOWS +// Return true if we could determine that the current process was linked with /SUBSYSTEM:CONSOLE. +// Return false otherwise. +static bool isConsoleApplication() +{ + auto dosHeader = reinterpret_cast(GetModuleHandle(nullptr)); + if (!dosHeader || dosHeader->e_magic != IMAGE_DOS_SIGNATURE) + return false; + auto dosHeaderAddr = reinterpret_cast(dosHeader); + auto ntHeaders = reinterpret_cast(dosHeaderAddr + dosHeader->e_lfanew); + if (ntHeaders->Signature != IMAGE_NT_SIGNATURE) + return false; + return ntHeaders->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI; +} +#endif + void QCoreApplicationPrivate::initConsole() { #ifdef Q_OS_WINDOWS + if (isConsoleApplication()) + return; const QString env = qEnvironmentVariable("QT_WIN_DEBUG_CONSOLE"); if (env.isEmpty()) return;