windows 10 的 cmd 命令提示符下,如果你双击界面中的字符,则可能会发现可以快速选中部分文字,鼠标拖动模式也可以进行区域选择。
这是因为在 cmd 的选项配置中,默认开启了 “快速编辑模式”。但是可能你也会发现,控制台可能会在此时被卡住,本应继续执行的命令被暂停了,此时只有按一下回车键才会继续执行。
简单来说,“快捷编辑模式”方便了我们从命令提示符中快速选取和复制信息,但也可能因此导致程序频繁的意外卡住而暂停。如果避免这种意外发生呢?答案只能是禁用“快捷编辑模式”。
对于程序的使用者来说,只需要在命令提示符上“右键->属性”中取消其选中即可。
对于命令行程序的开发者来说可以怎么做?
在微软的控制台开发文档中,我们可以找到 SetConsoleMode 函数,通过它可以开启或关闭快速编辑模式。
然而 SetConsoleMode
只是 Win32 SDK 为 C 语言提供的控制台开发接口。在 nodejs 中有没有办法呢?
其实命令提示符属性选项的默认配置都是保存在注册表中的,所以可以通过读取或设置注册表项来修改它:
# 读取 QuickEdit 的设置 reg query HKEY_CURRENT_USER\\Console /v QuickEdit # 设置 QuickEdit (关闭) reg add HKEY_CURRENT_USER\\Console /v QuickEdit /t REG_DWORD /d 00000000 /f
我们知道 nodeJs 的 child_process.exec 方法可以用于执行 cmd 命令。那么我们就可以变通的实现关闭或开启快捷编辑模式了。
以下为一个示例:
const child_process = reuqire('child_process'); /** 开启或关闭 window 的快速编辑模式 */ const setQuickEdit = async (enable = false) => { if (process.platform !== 'win32') return; try { let cmd = 'reg query HKEY_CURRENT_USER\\Console /v QuickEdit'; const quickEditSetting = await child_process.execSync(cmd); const isEnabled = quickEditSetting && String(quickEditSetting).trim().endsWith('1'); // console.log(String(quickEditSetting).trim()); if (isEnabled === enable) return; cmd = `reg add HKEY_CURRENT_USER\\Console /v QuickEdit /t REG_DWORD /d 0000000${enable ? '1' : '0'} /f`; await child_process.execSync(cmd); return true; } catch (err) { console.log(err); return false; } };
注意,与 SetConsoleMode
函数不同的是,SetConsoleMode
可以只设置当前 cmd 窗口,而以上方法只能实现全局性的开启或关闭“快速编辑模式”。