mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-22 20:21:26 +00:00
- fix isolated console mode (i.e. launching from explorer.exe)
This commit is contained in:
parent
9a9440a6f7
commit
86cd212d7f
3 changed files with 29 additions and 18 deletions
|
@ -1361,7 +1361,7 @@ 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" )
|
||||
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE /ENTRY:wmainCRTStartup" )
|
||||
else()
|
||||
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:wWinMainCRTStartup" )
|
||||
endif()
|
||||
|
|
|
@ -45,6 +45,11 @@
|
|||
#include <shellapi.h>
|
||||
#include <VersionHelpers.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(disable:4244)
|
||||
#endif
|
||||
|
@ -148,12 +153,23 @@ void I_SetIWADInfo()
|
|||
//==========================================================================
|
||||
|
||||
bool isConsoleApp()
|
||||
{
|
||||
static bool alreadychecked = false;
|
||||
static bool returnvalue;
|
||||
|
||||
if (!alreadychecked)
|
||||
{
|
||||
DWORD pids[2];
|
||||
DWORD num_pids = GetConsoleProcessList(pids, 2);
|
||||
bool win32con_is_exclusive = (num_pids <= 1);
|
||||
|
||||
return GetConsoleWindow() != NULL && !win32con_is_exclusive;
|
||||
returnvalue = ((GetConsoleWindow() != NULL && !win32con_is_exclusive) || (GetStdHandle(STD_OUTPUT_HANDLE) != NULL));
|
||||
alreadychecked = true;
|
||||
}
|
||||
|
||||
//printf("isConsoleApp is %i\n", returnvalue);
|
||||
|
||||
return returnvalue;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -183,20 +199,8 @@ int DoMain (HINSTANCE hInstance)
|
|||
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.
|
||||
|
@ -514,6 +518,11 @@ CUSTOM_CVAR(Bool, disablecrashlog, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
int wmain()
|
||||
{
|
||||
return wWinMain(GetModuleHandle(0), 0, GetCommandLineW(), SW_SHOW);
|
||||
}
|
||||
|
||||
int WINAPI wWinMain (HINSTANCE hInstance, HINSTANCE nothing, LPWSTR cmdline, int nCmdShow)
|
||||
{
|
||||
g_hInst = hInstance;
|
||||
|
|
|
@ -102,6 +102,7 @@
|
|||
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
||||
|
||||
void DestroyCustomCursor();
|
||||
bool isConsoleApp();
|
||||
|
||||
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
|
||||
|
||||
|
@ -306,6 +307,7 @@ static void PrintToStdOut(const char *cpt, HANDLE StdOut)
|
|||
else break;
|
||||
}
|
||||
}
|
||||
|
||||
DWORD bytes_written;
|
||||
WriteFile(StdOut, printData.GetChars(), (DWORD)printData.Len(), &bytes_written, NULL);
|
||||
if (terminal)
|
||||
|
|
Loading…
Reference in a new issue