public static void Shutdown() { if (OriginalOutput != null) { Console.SetOut(OriginalOutput); } if (OriginalEncoding != null) { Native.SetConsoleOutputCP((uint)OriginalEncoding.CodePage); Console.OutputEncoding = OriginalEncoding; } Native.FreeConsole(); LogText = null; LogFile = null; }
// Console Output // #region [public] Initialize() public static void Initialize(string logfile = null, bool logReset = true, bool timeStamp = true, bool dateStamp = false) { if (!Native.AttachConsole(uint.MaxValue)) { Native.AllocConsole(); } OriginalOutput = Console.Out; OriginalEncoding = Console.OutputEncoding; Native.SetConsoleOutputCP((uint)Encoding.UTF8.CodePage); Console.OutputEncoding = Encoding.UTF8; Stream outputStream; try { SafeFileHandle fileHandle = new SafeFileHandle(Native.GetStdHandle(STD_OUTPUT_HANDLE), true); outputStream = new FileStream(fileHandle, FileAccess.Write); } catch (Exception) { outputStream = Console.OpenStandardOutput(); } Console.SetOut(new ConsoleWriter(outputStream, Console.OutputEncoding) { AutoFlush = true }); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("Initialized."); Console.ResetColor(); Console.Clear(); DefaultColor = ConsoleColor.Gray; if (!string.IsNullOrEmpty(logfile)) { TimeStamp = timeStamp; DateStamp = dateStamp; LogFile = Path.GetFullPath(logfile); string directoryName = Path.GetDirectoryName(LogFile); if (!DateStamp) { string LogName = Path.GetFileNameWithoutExtension(LogFile) + ".{0}" + Path.GetExtension(LogFile); LogFile = Path.Combine(directoryName, LogName); } if (!System.IO.Directory.Exists(directoryName)) { System.IO.Directory.CreateDirectory(directoryName); } if (logReset && System.IO.File.Exists(LogFile)) { System.IO.File.Delete(LogFile); } } consoleStatus = new StatusText[0]; inputHistory = new List <string>(); inputHistoryIndex = -1; }