Node.js 关闭 window 命令提示符(cmd) Console 控制台的快速编辑模式

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 窗口,而以上方法只能实现全局性的开启或关闭“快速编辑模式”。

点赞 (4)

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

405 526 556 962 216 829 307 646 085 857 712 726 727 377 200 638 971 930 369 668 354 442 472 781 693 836 613 410 604 262 457 958 359 437 498 252 397 360 600 009 216 688 972 304 851 757 676 041 058 590