控制台命令行程序卡壳现象,命令行的“快速编辑模式”概念

http://t.zoukankan.com/stonemjl-p-13530774.html

(1)手动解决

windows cmd->属性->选项->编辑选项

取消 快速编辑模式

cmd默认开启了“快速编辑模式”,只要当鼠标点击cmd任何区域时,就自动进入了编辑模式,之后的程序向控制台输入内容甚至后台的程序都会被阻塞。

我们在控制台里面回车或者右键鼠标后,自动退出了编辑模式。因此,控制又恢复输出内容,服务端又正常了。

选择快速编辑模式的时候,鼠标不小心点到cmd某个位置,都可能让正在运行的进程都卡住,直到按下回车后,会跳出一堆。

(2)自动解决

拖动或点击CMD窗口造成程序阻塞,这是因为windows默认cmd窗口启用快速编辑模式,关闭即可。在bat文件中关闭cmd窗口的快速编辑模式,bat文件如下:

@echo off
reg add HKEY_CURRENT_USERConsole /v QuickEdit /t REG_DWORD /d 00000000 /f

 

 

 

 

控制台程序也是有这种问题

https://www.cnblogs.com/huangxincheng/p/16790444.html

开发人员使用 Console.WriteLine 来输出日志,在某个时刻输出端窗口因为各种原因被他人独占,导致程序侧无法输出内容到窗口而一直被迫等待。。。

 

除了手动关闭“快速编辑模式”,也可以使用代码关闭“快速编辑模式”:

    #region 关闭控制台 快速编辑模式、插入模式
    const int STD_INPUT_HANDLE = -10;
    const uint ENABLE_QUICK_EDIT_MODE = 0x0040;
    const uint ENABLE_INSERT_MODE = 0x0020;
    [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);

    public static void DisbleQuickEditMode()
    {
        IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE);
        uint mode;
        GetConsoleMode(hStdin, out mode);
        mode &= ~ENABLE_QUICK_EDIT_MODE;//移除快速编辑模式
        mode &= ~ENABLE_INSERT_MODE;      //移除插入模式
        SetConsoleMode(hStdin, mode);
    }
    #endregion

 

posted @ 2022-10-17 11:29  毛毛虫!  阅读(3707)  评论(0)    收藏  举报