【控制台】快速编辑模式

【控制台】快速编辑模式

Windows Cmd控制台程序会被鼠标单击暂停的解决方法,控制台程序在创建之后默认是打开了快速编辑模式,既当你的程序运行的时候,你点击界面,界面会出现一个白色的方框,然后程序就不运行了,不管有多少个线程。

方式一

第一种方式,在控制台程序状态栏右键属性,去掉快速编辑模式的勾选

方式二

第二种方式,就是在你的程序中添加代码,关闭快速编辑模式

C语言

#include <chrono>
#include <iostream>
#include <thread>
#include <windows.h>

int main()
{
    //	关闭控制台程序的快速编辑模式,否则会出现点击界面,程序将会变成阻塞状态,不按回车无法继续运行
    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);

    // 以下是测试程序
    int count = 0;
    while (true) { // 无限循环
        std::cout << "\rCount: " << count;
        count++;

        // 暂停 0.5 秒
        std::this_thread::sleep_for(std::chrono::milliseconds(500));
    }

    return 0;
}

python语言

import sys, time
import ctypes
import ctypes.wintypes

def disable_quick_edit():
    # 获取控制台句柄
    STD_INPUT_HANDLE = -10
    hStdin = ctypes.windll.kernel32.GetStdHandle(STD_INPUT_HANDLE)

    # 获取当前控制台模式
    mode = ctypes.wintypes.DWORD()
    ctypes.windll.kernel32.GetConsoleMode(hStdin, ctypes.byref(mode))

    # 禁用快速编辑模式
    mode.value &= ~0x0040  # 0x0040 是 ENABLE_QUICK_EDIT_MODE
    ctypes.windll.kernel32.SetConsoleMode(hStdin, mode)

# 测试函数
def loop():
    i = 0
    while True:
        sys.stdout.write(f"\rCount: {i}")
        time.sleep(0.5)
        i+=1

if __name__ == "__main__":
    disable_quick_edit()
    print("快速编辑模式已禁用。")
    loop()

posted @ 2025-04-29 09:22  ReRound  阅读(194)  评论(0)    收藏  举报