zoukankan      html  css  js  c++  java
  • 控制台 快速编辑模式

    /// <summary>
            /// 快速编辑模式是一种很便捷的操作方式:左键选中,右键复制以及右键从剪贴板粘贴内容等
            /// 如果鼠标选中控制台界面上的内容,控制台就被阻塞了
            /// 在Windows Server 2012 及Windowns 8以上,控制台窗口的程序默认是打开“快速编辑模式”的开关的。
            /// 注册表HKEY_CURRENT_USERConsole的QuickEdit可控制全局是否打开“快速编辑模式”模式,0:不打开,1:打开
            /// 在某些场景下,控制台打印输出的时候,不系统阻塞导致程序卡住,但是windows不能针对所有命令行统一设置,只能单个程序去设置
            /// 此时,可使用如下方式:
            /// </summary>
            public static void DisableConsoleQuickEdit()
            {
                var handle = GetStdHandle(StdHandle.InputHandle);
                uint mode;
                GetConsoleMode(handle, out mode);
                ConsoleModes newMode = (ConsoleModes)mode;
                if ((newMode & ConsoleModes.ENABLE_QUICK_EDIT_MODE) == ConsoleModes.ENABLE_QUICK_EDIT_MODE)
                    newMode ^= ConsoleModes.ENABLE_QUICK_EDIT_MODE;
                if ((newMode & ConsoleModes.ENABLE_INSERT_MODE) == ConsoleModes.ENABLE_INSERT_MODE)
                    newMode ^= ConsoleModes.ENABLE_INSERT_MODE;
                if ((newMode & ConsoleModes.ENABLE_MOUSE_INPUT) == ConsoleModes.ENABLE_MOUSE_INPUT)
                    newMode ^= ConsoleModes.ENABLE_MOUSE_INPUT;
                SetConsoleMode(handle, (uint)newMode);
            }
    
            public static bool SetConsoleFont(uint index)
            {
                return SetConsoleFont(GetStdHandle(StdHandle.OutputHandle), index);
            }
    
            [DllImport("kernel32")]
            public static extern IntPtr GetStdHandle(StdHandle index);
    
            [DllImport("kernel32.dll", SetLastError = true)]
            static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
    
            /// <summary>
            /// https://docs.microsoft.com/en-us/windows/console/setconsolemode?redirectedfrom=MSDN
            /// </summary>
            /// <param name="hConsoleHandle">控制台输入缓冲区或控制台屏幕缓冲区的句柄</param>
            /// <param name="lpMode">模式</param>
            /// <returns></returns>
            [DllImport("kernel32.dll", SetLastError = true)]
            static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);
    
            [DllImport("kernel32")]
            private extern static bool SetConsoleFont(IntPtr hOutput, uint index);
    
            public enum StdHandle
            {
                OutputHandle = -11,
                InputHandle = -10,
                ErrotHandle = -12,
            }
    
            [Flags]
            private enum ConsoleModes : uint
            {
                ENABLE_PROCESSED_INPUT = 0x0001,
                ENABLE_LINE_INPUT = 0x0002,
                ENABLE_ECHO_INPUT = 0x0004,
                ENABLE_WINDOW_INPUT = 0x0008,
                ENABLE_MOUSE_INPUT = 0x0010,
                ENABLE_INSERT_MODE = 0x0020,
                ENABLE_QUICK_EDIT_MODE = 0x0040,
                ENABLE_EXTENDED_FLAGS = 0x0080,
                ENABLE_AUTO_POSITION = 0x0100,
    
                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
            }
  • 相关阅读:
    linux卸载rpm包
    Centos6.3手动rpm安装gcc,c++
    阿里云服务器挂载分区
    linux下svn目录管理
    mac搭建cordova的android环境
    mac下搭建cordova开发环境
    程序员除了写代码还可以做点啥
    php之soap使用
    linux中找不到/etc/sysconfig/iptables
    const 位置不一样导致的变化
  • 原文地址:https://www.cnblogs.com/lcawen/p/12742916.html
Copyright © 2011-2022 走看看