如何停止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
相关产品推荐
相关产品推荐

