本文作者: 峽州仙士
原文鏈接: https://cjh0613.github.io/blog/20200503win10cmd.html
聲明: 如文章有更新铛碑,將首先在本網站(峽州仙士之頁)發(fā)布OЫ恪(可百度搜到)| 本網站所有文章除特別聲明外,均采用 BY-NC-SA 許可協(xié)議杨帽。轉載請注明出處!
windows10 cmd命令提示符/批處理/終端 快速編輯模式bug 程序運行被阻塞 頂部標題欄提示選擇 需要回車才能繼續(xù)執(zhí)行
為什么出現(xiàn)這種情況嗤军?
這是快速編輯模式的功能注盈。當程序不斷滾動控制臺窗口的內容時,用戶無法合理地選擇文本型雳。因此当凡,控制臺主機程序只是停止讀取stdout/stderr輸出山害,程序將掛起纠俭,直到用戶完成操作沿量。這可以更改,您需要關閉啟用快速編輯模式選項冤荆。
請注意朴则,這個“掛起”與程序以遠高于控制臺主機可以使用的速率生成stdout輸出時得到的執(zhí)行暫停沒有本質區(qū)別。盡管這些延誤是有限的钓简。
而且這并不是用戶停止程序的唯一方法乌妒,他也可以簡單地按ctrl+s。按ctrl+q將再次恢復程序外邓。
解決方法:(如果有其他方法撤蚊,歡迎留言)
手動設置法
windows cmd->右鍵->屬性->選項->編輯選項
或
單擊左上角圖標->屬性->選項->編輯選項
取消 快速編輯模式
但是我將cmd設置之后,cmd是禁用了损话,但運行一個exe終端侦啸,發(fā)現(xiàn)它還是啟動快速編輯模式
所以每個新exe都需手動設置。
修改程序法
windows bat
法一
頭部輸入以禁用
@echo off
reg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f
REGEDIT
- PRO:與任何常見的Windows系統(tǒng)兼容
- CON:需要臨時REG文件的創(chuàng)建
- 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:不需要的臨時文件創(chuàng)建
- 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);