116 lines
4.3 KiB
C#
116 lines
4.3 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// 控制台系统操作回调委托
|
|
/// </summary>
|
|
public delegate bool ControlCtrlDelegate(int CtrlType);
|
|
|
|
/// <summary>
|
|
/// 设置控制台系统操作回调
|
|
/// </summary>
|
|
[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);
|
|
[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);
|
|
|
|
[DllImport("kernel32.dll")]
|
|
public static extern IntPtr GetConsoleWindow();
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 启用控制台快速编辑
|
|
/// </summary>
|
|
public static void EnableQuickEditMode()
|
|
{
|
|
IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE);
|
|
uint mode;
|
|
GetConsoleMode(hStdin, out mode);
|
|
mode |= ENABLE_QUICK_EDIT_MODE;
|
|
SetConsoleMode(hStdin, mode);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 禁用控制台快速编辑
|
|
/// </summary>
|
|
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,
|
|
/// <summary>
|
|
/// Activates the window and displays it as a maximized window.
|
|
/// </summary>
|
|
SW_SHOWMAXIMIZED = 3,
|
|
/// <summary>
|
|
/// Displays a window in its most recent size and position. This value is similar to SW_SHOWNORMAL, except that the window is not activated.
|
|
/// </summary>
|
|
SW_SHOWNOACTIVATE = 4,
|
|
/// <summary>
|
|
/// Activates the window and displays it in its current size and position.
|
|
/// </summary>
|
|
SW_SHOW = 5,
|
|
/// <summary>
|
|
/// Minimizes the specified window and activates the next top-level window in the Z order.
|
|
/// </summary>
|
|
SW_MINIMIZE = 6,
|
|
/// <summary>
|
|
/// Displays the window as a minimized window. This value is similar to SW_SHOWMINIMIZED, except the window is not activated.
|
|
/// </summary>
|
|
SW_SHOWMINNOACTIVE = 7,
|
|
/// <summary>
|
|
/// Displays the window in its current size and position. This value is similar to SW_SHOW, except that the window is not activated.
|
|
/// </summary>
|
|
SW_SHOWNA = 8,
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
SW_RESTORE = 9,
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
SW_SHOWDEFAULT = 10,
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
SW_FORCEMINIMIZE = 11
|
|
}
|
|
}
|
|
}
|