mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-25 21:41:03 +00:00
- enable console subsystem processing for Windows, enable runtime detection
This commit is contained in:
parent
ee5442c06b
commit
70eb4b974d
2 changed files with 47 additions and 1 deletions
|
@ -1359,6 +1359,13 @@ else()
|
|||
endif()
|
||||
|
||||
if( MSVC )
|
||||
option ( CONSOLE_MODE "Compile as a console application" OFF )
|
||||
if ( CONSOLE_MODE )
|
||||
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE /ENTRY:wWinMainCRTStartup" )
|
||||
else()
|
||||
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:wWinMainCRTStartup" )
|
||||
endif()
|
||||
|
||||
option( ZDOOM_GENERATE_MAPFILE "Generate .map file for debugging." OFF )
|
||||
set( LINKERSTUFF "/MANIFEST:NO" )
|
||||
|
||||
|
|
|
@ -134,6 +134,28 @@ void I_SetIWADInfo()
|
|||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// isConsoleApp()
|
||||
//
|
||||
// runtime detection to detect if this is a console subsystem app.
|
||||
//
|
||||
// the reason for doing this is because it is possible to edit a binary directly and change its subsystem
|
||||
// type via hexedit so in order to gain flexibility it makes no sense to just compile out the unused code.
|
||||
//
|
||||
// we may plan to publish tools to allow users to do this manually on their own.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
bool isConsoleApp()
|
||||
{
|
||||
DWORD pids[2];
|
||||
DWORD num_pids = GetConsoleProcessList(pids, 2);
|
||||
bool win32con_is_exclusive = (num_pids <= 1);
|
||||
|
||||
return GetConsoleWindow() != NULL && !win32con_is_exclusive;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// DoMain
|
||||
|
@ -158,7 +180,24 @@ int DoMain (HINSTANCE hInstance)
|
|||
Args->AppendArg(FString(wargv[i]));
|
||||
}
|
||||
|
||||
if (Args->CheckParm("-stdout") || Args->CheckParm("-norun"))
|
||||
if (isConsoleApp())
|
||||
{
|
||||
StdOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
BY_HANDLE_FILE_INFORMATION info;
|
||||
|
||||
if (!GetFileInformationByHandle(StdOut, &info) && StdOut != nullptr)
|
||||
{
|
||||
SetConsoleCP(CP_UTF8);
|
||||
SetConsoleOutputCP(CP_UTF8);
|
||||
DWORD mode;
|
||||
if (GetConsoleMode(StdOut, &mode))
|
||||
{
|
||||
if (SetConsoleMode(StdOut, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING))
|
||||
FancyStdOut = IsWindows10OrGreater(); // Windows 8.1 and lower do not understand ANSI formatting.
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (Args->CheckParm("-stdout") || Args->CheckParm("-norun"))
|
||||
{
|
||||
// As a GUI application, we don't normally get a console when we start.
|
||||
// If we were run from the shell and are on XP+, we can attach to its
|
||||
|
|
Loading…
Reference in a new issue