using Microsoft.Win32.SafeHandles; using System.Runtime.InteropServices; namespace MiniTerm.Native { /// /// PInvoke signatures for win32 console api /// static class ConsoleApi { internal const int STD_OUTPUT_HANDLE = -11; internal const uint ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004; internal const uint DISABLE_NEWLINE_AUTO_RETURN = 0x0008; [DllImport("kernel32.dll", SetLastError = true)] internal static extern SafeFileHandle GetStdHandle(int nStdHandle); [DllImport("kernel32.dll", SetLastError = true)] internal static extern bool SetConsoleMode(SafeFileHandle hConsoleHandle, uint mode); [DllImport("kernel32.dll", SetLastError = true)] internal static extern bool GetConsoleMode(SafeFileHandle handle, out uint mode); internal delegate bool ConsoleEventDelegate(CtrlTypes ctrlType); internal enum CtrlTypes : uint { CTRL_C_EVENT = 0, CTRL_BREAK_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT = 5, CTRL_SHUTDOWN_EVENT } [DllImport("kernel32.dll", SetLastError = true)] internal static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add); } }