/// <summary> /// Flashes the console window /// </summary> /// <param name="once">if off, flashes repeated until the user makes the console foreground</param> public void Flash(bool once) { IntPtr hwnd = LoggerUtils.GetConsoleWindow(); if (hwnd == IntPtr.Zero) { return; } int style = LoggerUtils.GetWindowLong(hwnd, LoggerUtils.GWL_STYLE); if ((style & LoggerUtils.WS_CAPTION) == 0) { return; } FlashWInfo info = new FlashWInfo(); info.Size = Marshal.SizeOf(typeof(FlashWInfo)); info.Flags = LoggerUtils.FLASHW_ALL; if (!once) { info.Flags |= LoggerUtils.FLASHW_TIMERNOFG; } LoggerUtils.FlashWindowEx(ref info); }
public void Initialize() { if (initialized) { return; } IntPtr hwnd = LoggerUtils.GetConsoleWindow(); initialized = true; // Console app if (hwnd != IntPtr.Zero) { buffer = LoggerUtils.GetStdHandle(LoggerUtils.STD_OUTPUT_HANDLE); return; } // Windows app bool success = LoggerUtils.AllocConsole(); handleRoutine = new HandlerRoutine(Handler); LoggerUtils.SetConsoleCtrlHandler(handleRoutine, true); this.Visible = false; if (!success) { return; } buffer = LoggerUtils.CreateConsoleScreenBuffer(LoggerUtils.GENERIC_READ | LoggerUtils.GENERIC_WRITE, LoggerUtils.FILE_SHARE_READ | LoggerUtils.FILE_SHARE_WRITE, IntPtr.Zero, LoggerUtils.CONSOLE_TEXTMODE_BUFFER, IntPtr.Zero); bool result = LoggerUtils.SetConsoleActiveScreenBuffer(buffer); //Set console output buffer size IntPtr handle = LoggerUtils.CreateFile( "CONOUT$", // name LoggerUtils.GENERIC_WRITE | LoggerUtils.GENERIC_READ, // desired access LoggerUtils.FILE_SHARE_WRITE | LoggerUtils.FILE_SHARE_READ, // share access null, // no security attributes LoggerUtils.OPEN_EXISTING, // device already exists 0, // no flags or attributes IntPtr.Zero); // no template file. consoleHandle = new SafeFileHandle(handle, true); const UInt16 conWidth = 256; const UInt16 conHeight = 2500; Coord dwSize = new Coord(conWidth, conHeight); LoggerUtils.SetConsoleScreenBufferSize(consoleHandle.DangerousGetHandle(), dwSize); LoggerUtils.SetStdHandle(LoggerUtils.STD_OUTPUT_HANDLE, buffer); LoggerUtils.SetStdHandle(LoggerUtils.STD_ERROR_HANDLE, buffer); Title = "Logger Console"; Stream s = Console.OpenStandardInput(LoggerUtils._DefaultConsoleBufferSize); StreamReader reader = null; if (s == Stream.Null) { reader = StreamReader.Null; } else { reader = new StreamReader(s, Encoding.GetEncoding(LoggerUtils.GetConsoleCP()), false, LoggerUtils._DefaultConsoleBufferSize); } Console.SetIn(reader); // Set up Console.Out StreamWriter writer = null; s = Console.OpenStandardOutput(LoggerUtils._DefaultConsoleBufferSize); if (s == Stream.Null) { writer = StreamWriter.Null; } else { writer = new StreamWriter(s, Encoding.GetEncoding(LoggerUtils.GetConsoleOutputCP()), LoggerUtils._DefaultConsoleBufferSize); writer.AutoFlush = true; } Console.SetOut(writer); s = Console.OpenStandardError(LoggerUtils._DefaultConsoleBufferSize); if (s == Stream.Null) { writer = StreamWriter.Null; } else { writer = new StreamWriter(s, Encoding.GetEncoding(LoggerUtils.GetConsoleOutputCP()), LoggerUtils._DefaultConsoleBufferSize); writer.AutoFlush = true; } Console.SetError(writer); // // Disable Close as this would close the main app also // hwnd = LoggerUtils.GetConsoleWindow(); IntPtr hMenu = LoggerUtils.GetSystemMenu(hwnd, false); LoggerUtils.DeleteMenu(hMenu, LoggerUtils.SC_CLOSE, LoggerUtils.MF_BYCOMMAND); NativeMethods.SetWindowPos(hwnd, new IntPtr(-1), 0, 0, 0, 0, NativeMethods.SWP_NOMOVE | NativeMethods.SWP_NOSIZE); }