You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何停止Windows控制台光标闪烁?求C++简易实现方案

仅停止控制台光标闪烁的C++解决方案

当然可以!完全不用隐藏光标,只消停掉它的闪烁就行,而且用原生C++代码就能搞定,不需要任何第三方工具。分Windows和Linux两种常见平台给你具体方案:

Windows平台解决方案

在Windows上,我们可以通过系统API修改控制台的光标闪烁率参数,将其设为0即可停止闪烁,同时保持光标可见。

代码示例

#include <windows.h>

// 保存原始的光标闪烁率,用于后续恢复(可选)
DWORD originalBlinkRate = 0;

void DisableCursorBlink() {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFOEX csbi;
    csbi.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
    
    // 获取当前控制台的屏幕缓冲区信息
    if (!GetConsoleScreenBufferInfoEx(hConsole, &csbi)) {
        return; // 获取失败则直接退出
    }
    
    // 保存原始闪烁率,方便后续恢复
    originalBlinkRate = csbi.dwCursorBlinkRate;
    
    // 将闪烁率设为0(0表示完全不闪烁,系统默认通常是500ms)
    csbi.dwCursorBlinkRate = 0;
    
    // 应用修改后的设置
    SetConsoleScreenBufferInfoEx(hConsole, &csbi);
}

void RestoreCursorBlink() {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFOEX csbi;
    csbi.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX);
    
    if (GetConsoleScreenBufferInfoEx(hConsole, &csbi)) {
        csbi.dwCursorBlinkRate = originalBlinkRate;
        SetConsoleScreenBufferInfoEx(hConsole, &csbi);
    }
}

int main() {
    DisableCursorBlink();
    std::cout << "光标已停止闪烁,按任意键退出..." << std::endl;
    system("pause");
    
    // 可选:退出前恢复光标默认闪烁状态
    RestoreCursorBlink();
    return 0;
}

说明

  • 这个方案直接调用Windows原生API,不需要额外依赖库,编译时直接用VS或MinGW即可。
  • 修改后的设置仅对当前控制台窗口生效,如果你希望程序退出后恢复默认闪烁率,可以调用RestoreCursorBlink函数。

Linux/Unix-like平台解决方案

Linux下的大多数终端(包括tty、gnome-terminal、konsole等)都支持ANSI转义序列,我们可以直接输出特定序列来关闭光标闪烁。

代码示例

#include <iostream>

void DisableCursorBlink() {
    // 输出ANSI转义序列关闭光标闪烁
    std::cout << "\x1b[?12l";
    std::cout.flush(); // 确保控制序列立即发送到终端
}

void RestoreCursorBlink() {
    // 输出ANSI转义序列恢复光标闪烁
    std::cout << "\x1b[?12h";
    std::cout.flush();
}

int main() {
    DisableCursorBlink();
    std::cout << "光标已停止闪烁,按回车键退出..." << std::endl;
    std::cin.get();
    
    // 可选:恢复光标闪烁
    RestoreCursorBlink();
    return 0;
}

说明

  • 这个方案非常轻量,不需要调用任何系统API,只需要输出控制字符即可。
  • 几乎所有现代Linux终端都支持这个ANSI序列,如果是非常老旧的终端可能不兼容,但这种情况极少。

内容的提问来源于stack exchange,提问作者WieeRd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:19:08