瀏覽代碼

Merge pull request #94839 from alvinhochun/win-set-console-mode

Combine existing modes when calling SetConsoleMode
Rémi Verschelde 1 年之前
父節點
當前提交
2c8ab6e7eb
共有 2 個文件被更改,包括 6 次插入2 次删除
  1. 3 1
      platform/windows/console_wrapper_windows.cpp
  2. 3 1
      platform/windows/os_windows.cpp

+ 3 - 1
platform/windows/console_wrapper_windows.cpp

@@ -65,7 +65,9 @@ int main(int argc, char *argv[]) {
 
 	// Enable virtual terminal sequences processing.
 	HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
-	DWORD out_mode = ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+	DWORD out_mode = 0;
+	GetConsoleMode(stdout_handle, &out_mode);
+	out_mode |= ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
 	SetConsoleMode(stdout_handle, out_mode);
 
 	// Find main executable name and check if it exist.

+ 3 - 1
platform/windows/os_windows.cpp

@@ -2044,7 +2044,9 @@ OS_Windows::OS_Windows(HINSTANCE _hInstance) {
 	// NOTE: The engine does not use ANSI escape codes to color error/warning messages; it uses Windows API calls instead.
 	// Therefore, error/warning messages are still colored on Windows versions older than 10.
 	HANDLE stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE);
-	DWORD outMode = ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+	DWORD outMode = 0;
+	GetConsoleMode(stdoutHandle, &outMode);
+	outMode |= ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
 	if (!SetConsoleMode(stdoutHandle, outMode)) {
 		// Windows 8.1 or below, or Windows 10 prior to Anniversary Update.
 		print_verbose("Can't set the ENABLE_VIRTUAL_TERMINAL_PROCESSING Windows console mode. `print_rich()` will not work as expected.");