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
}
}
}