using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace BarrageGrab { public static class WinApi { const int STD_INPUT_HANDLE = -10; const uint ENABLE_QUICK_EDIT_MODE = 0x0040; /// /// 控制台系统操作回调委托 /// public delegate bool ControlCtrlDelegate(int CtrlType); /// /// 设置控制台系统操作回调 /// [DllImport("kernel32.dll")] public static extern bool SetConsoleCtrlHandler(ControlCtrlDelegate HandlerRoutine, bool Add); [DllImport("kernel32.dll", SetLastError = true)] internal static extern IntPtr GetStdHandle(int hConsoleHandle); [DllImport("kernel32.dll", SetLastError = true)] internal static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint mode); [DllImport("kernel32.dll", SetLastError = true)] internal static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint mode); ///If the function fails, the return value is NULL. [DllImport("user32.dll")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("User32.dll", EntryPoint = "ShowWindow")] public static extern bool ShowWindow(IntPtr hWnd, CmdShow nCmdShow); /// /// 启用控制台快速编辑 /// public static void EnableQuickEditMode() { IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE); uint mode; GetConsoleMode(hStdin, out mode); mode |= ENABLE_QUICK_EDIT_MODE; SetConsoleMode(hStdin, mode); } /// /// 禁用控制台快速编辑 /// public static void DisableQuickEditMode() { IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE); uint mode; GetConsoleMode(hStdin, out mode); mode &= ~ENABLE_QUICK_EDIT_MODE; SetConsoleMode(hStdin, mode); } public enum CmdShow : int { SW_HIDE = 0, SW_SHOWNORMAL = 1, SW_SHOWMINIMIZED = 2, /// /// Activates the window and displays it as a maximized window. /// SW_SHOWMAXIMIZED = 3, /// /// Displays a window in its most recent size and position. This value is similar to SW_SHOWNORMAL, except that the window is not activated. /// SW_SHOWNOACTIVATE = 4, /// /// Activates the window and displays it in its current size and position. /// SW_SHOW = 5, /// /// Minimizes the specified window and activates the next top-level window in the Z order. /// SW_MINIMIZE = 6, /// /// Displays the window as a minimized window. This value is similar to SW_SHOWMINIMIZED, except the window is not activated. /// SW_SHOWMINNOACTIVE = 7, /// /// Displays the window in its current size and position. This value is similar to SW_SHOW, except that the window is not activated. /// SW_SHOWNA = 8, /// /// Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window. /// SW_RESTORE = 9, /// /// Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. /// SW_SHOWDEFAULT = 10, /// /// Minimizes a window, even if the thread that owns the window is not responding. This flag should only be used when minimizing windows from a different thread. /// SW_FORCEMINIMIZE = 11 } } }