Example #1
0
        /// <summary>
        /// Allocates a console instance to the running process
        /// </summary>
        internal static void CreateLoggerInstance()
        {
            NativeImport.AllocConsole();

            var outFile = NativeImport.CreateFile("CONOUT$", NativeImport.ConsolePropertyModifiers.GENERIC_WRITE
                                                  | NativeImport.ConsolePropertyModifiers.GENERIC_READ,
                                                  NativeImport.ConsolePropertyModifiers.FILE_SHARE_WRITE,
                                                  0, NativeImport.ConsolePropertyModifiers.OPEN_EXISTING, /*FILE_ATTRIBUTE_NORMAL*/ 0, 0);

            var safeHandle = new SafeFileHandle(outFile, true);

            NativeImport.SetStdHandle(-11, outFile);

            FileStream   fs     = new FileStream(safeHandle, FileAccess.Write);
            StreamWriter writer = new StreamWriter(fs)
            {
                AutoFlush = true
            };

            Console.SetOut(writer);

            if (NativeImport.GetConsoleMode(outFile, out var cMode))
            {
                NativeImport.SetConsoleMode(outFile, cMode | 0x0200);
            }

            Console.Title = $"Log Window - {Assembly.GetExecutingAssembly().GetName().Name}";
        }