美文网首页
windows10 cmd命令提示符/批处理/终端 快速编辑模式

windows10 cmd命令提示符/批处理/终端 快速编辑模式

作者: 峡州仙士 | 来源:发表于2020-05-23 12:12 被阅读0次

    本文作者: 峡州仙士

    原文链接: https://cjh0613.github.io/blog/20200503win10cmd.html

    声明: 如文章有更新,将首先在本网站(峡州仙士之页)发布!(可百度搜到)| 本网站所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!


    windows10 cmd命令提示符/批处理/终端 快速编辑模式bug 程序运行被阻塞 顶部标题栏提示选择 需要回车才能继续执行

    为什么出现这种情况?

    这是快速编辑模式的功能。当程序不断滚动控制台窗口的内容时,用户无法合理地选择文本。因此,控制台主机程序只是停止读取stdout/stderr输出,程序将挂起,直到用户完成操作。这可以更改,您需要关闭启用快速编辑模式选项。
    请注意,这个“挂起”与程序以远高于控制台主机可以使用的速率生成stdout输出时得到的执行暂停没有本质区别。尽管这些延误是有限的。
    而且这并不是用户停止程序的唯一方法,他也可以简单地按ctrl+s。按ctrl+q将再次恢复程序。

    解决方法:(如果有其他方法,欢迎留言)

    手动设置法

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

    单击左上角图标->属性->选项->编辑选项

    取消 快速编辑模式

    但是我将cmd设置之后,cmd是禁用了,但运行一个exe终端,发现它还是启动快速编辑模式

    所以每个新exe都需手动设置。

    修改程序法

    windows bat

    法一

    头部输入以禁用

    @echo off
    reg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f
    

    REGEDIT

    • PRO:与任何常见的Windows系统兼容
    • CON:需要临时REG文件的创建
    • code(去你的脚本的开头):
    if exist "%TEMP%\consoleSettingsBackup.reg" regedit /S "%TEMP%\consoleSettingsBackup.reg"&DEL /F /Q "%TEMP%\consoleSettingsBackup.reg"&goto :mainstart
    regedit /S /e "%TEMP%\consoleSettingsBackup.reg" "HKEY_CURRENT_USER\Console"
    echo REGEDIT4>"%TEMP%\disablequickedit.reg"
    echo [HKEY_CURRENT_USER\Console]>>"%TEMP%\disablequickedit.reg"
    (echo "QuickEdit"=dword:00000000)>>"%TEMP%\disablequickedit.reg"
    regedit /S "%TEMP%\disablequickedit.reg"
    DEL /F /Q "%TEMP%\disablequickedit.reg"
    start "" "cmd" /c "%~dpnx0"&exit
    
    :mainstart
    

    REG

    • PRO:不需要的临时文件创建
    • CON:不可用在Windows 2000和早期没有资源工具包
    • CON:不同的版本有不同的语法

    (在code以下的占)

    • code(去你的脚本的开头):
    set reg50=::&set reg51=::&(reg /?>nul 2>&1 && set reg51=)
    if %errorlevel%==5005 set reg50=
    set qkey=HKEY_CURRENT_USER\Console&set qprop=QuickEdit
    %reg51%if defined qedit_val (echo y|reg add "%qkey%" /v "%qprop%" /t REG_DWORD /d %qedit_val%&goto :mainstart)
    %reg50%if defined qedit_val (reg update "%qkey%\%qprop%"=%qedit_val%&goto :mainstart)
    %reg51%for /f "tokens=3*" %%i in ('reg query "%qkey%" /v "%qprop%" ^| FINDSTR /I "%qprop%"') DO set qedit_val=%%i
    %reg50%for /f "tokens=3*" %%i in ('reg query "%qkey%\%qprop%"') DO set qedit_val=%%i
    if "%qedit_val%"=="0" goto :mainstart
    if "%qedit_val%"=="0x0" goto :mainstart
    %reg51%echo y|reg add "%qkey%" /v "%qprop%" /t REG_DWORD /d 0
    %reg50%if "%qedit_val%"=="" reg add "%qkey%\%qprop%"=0 REG_DWORD
    %reg50%if "%qedit_val%"=="1" reg update "%qkey%\%qprop%"=0
    start "" "cmd" /c set qedit_val=%qedit_val% ^& call "%~dpnx0"&exit
    
    :mainstart
    

    C++

    搬运过来的,没测试过……

    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
    
    DWORD mode;
    
    GetConsoleMode(hStdin, &mode);
    
    mode &= ~ENABLE_QUICK_EDIT_MODE; //移除快速编辑模式
    
    mode &= ~ENABLE_INSERT_MODE; //移除插入模式
    
    mode &= ~ENABLE_MOUSE_INPUT;
    
    SetConsoleMode(hStdin, mode);
    

    参考资料

    参考资料
    https://stackoverflow.com/questions/21805712/windows-batch-how-to-disable-quickedit-mode-for-individual-scripts/42998160#42998160
    https://www.it1352.com/329069.html
    https://blog.csdn.net/gxc1222/article/details/80999234
    https://blog.csdn.net/achilles_01/article/details/98849031
    https://blog.csdn.net/cuiyaoqiang/article/details/103904846
    https://docs.microsoft.com/en-us/windows/console/getconsolemode?redirectedfrom=MSDN

    相关文章

      网友评论

          本文标题:windows10 cmd命令提示符/批处理/终端 快速编辑模式

          本文链接:https://www.haomeiwen.com/subject/yrmkahtx.html