【优化】在win下自动禁用console的快速编辑模式
parent
e7066c579b
commit
42d297ac29
|
|
@ -149,6 +149,7 @@ Options:
|
|||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
ConsoleWindow.EnableQuickEditMode(false);
|
||||
Console.OutputEncoding = System.Text.Encoding.UTF8;
|
||||
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
|
||||
var profile = new ProfileTimer();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,78 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Luban.Common.Utils
|
||||
{
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public static class ConsoleWindow
|
||||
{
|
||||
private static class NativeFunctions
|
||||
{
|
||||
public enum StdHandle : int
|
||||
{
|
||||
STD_INPUT_HANDLE = -10,
|
||||
STD_OUTPUT_HANDLE = -11,
|
||||
STD_ERROR_HANDLE = -12,
|
||||
}
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
public static extern IntPtr GetStdHandle(int nStdHandle); //returns Handle
|
||||
|
||||
public enum ConsoleMode : uint
|
||||
{
|
||||
ENABLE_ECHO_INPUT = 0x0004,
|
||||
ENABLE_EXTENDED_FLAGS = 0x0080,
|
||||
ENABLE_INSERT_MODE = 0x0020,
|
||||
ENABLE_LINE_INPUT = 0x0002,
|
||||
ENABLE_MOUSE_INPUT = 0x0010,
|
||||
ENABLE_PROCESSED_INPUT = 0x0001,
|
||||
ENABLE_QUICK_EDIT_MODE = 0x0040,
|
||||
ENABLE_WINDOW_INPUT = 0x0008,
|
||||
ENABLE_VIRTUAL_TERMINAL_INPUT = 0x0200,
|
||||
|
||||
//screen buffer handle
|
||||
ENABLE_PROCESSED_OUTPUT = 0x0001,
|
||||
ENABLE_WRAP_AT_EOL_OUTPUT = 0x0002,
|
||||
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004,
|
||||
DISABLE_NEWLINE_AUTO_RETURN = 0x0008,
|
||||
ENABLE_LVB_GRID_WORLDWIDE = 0x0010
|
||||
}
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
public static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
public static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);
|
||||
}
|
||||
|
||||
public static void EnableQuickEditMode(bool enable)
|
||||
{
|
||||
if (System.OperatingSystem.IsWindows())
|
||||
{
|
||||
//QuickEdit lets the user select text in the console window with the mouse, to copy to the windows clipboard.
|
||||
//But selecting text stops the console process (e.g. unzipping). This may not be always wanted.
|
||||
IntPtr consoleHandle = NativeFunctions.GetStdHandle((int)NativeFunctions.StdHandle.STD_INPUT_HANDLE);
|
||||
UInt32 consoleMode;
|
||||
|
||||
NativeFunctions.GetConsoleMode(consoleHandle, out consoleMode);
|
||||
if (enable)
|
||||
{
|
||||
consoleMode |= ((uint)NativeFunctions.ConsoleMode.ENABLE_QUICK_EDIT_MODE);
|
||||
}
|
||||
else
|
||||
{
|
||||
consoleMode &= ~((uint)NativeFunctions.ConsoleMode.ENABLE_QUICK_EDIT_MODE);
|
||||
}
|
||||
|
||||
consoleMode |= ((uint)NativeFunctions.ConsoleMode.ENABLE_EXTENDED_FLAGS);
|
||||
|
||||
NativeFunctions.SetConsoleMode(consoleHandle, consoleMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -40,6 +40,7 @@ namespace Luban.Server
|
|||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
ConsoleWindow.EnableQuickEditMode(false);
|
||||
Console.OutputEncoding = System.Text.Encoding.UTF8;
|
||||
|
||||
var options = ParseOptions(args);
|
||||
|
|
|
|||
Loading…
Reference in New Issue