//go:build windows // +build windows package ansi import ( "syscall" "unsafe" ) // Windows API 常量定义 const ( STD_OUTPUT_HANDLE = uintptr(4294967285) // -11 ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004 ) var ( kernel32 = syscall.NewLazyDLL("kernel32.dll") procGetStdHandle = kernel32.NewProc("GetStdHandle") procGetConsoleMode = kernel32.NewProc("GetConsoleMode") procSetConsoleMode = kernel32.NewProc("SetConsoleMode") ) // EnableANSIConsole 启用 Windows 控制台 ANSI 转义序列支持 func EnableANSIConsole() bool { // 获取标准输出句柄 stdout, _, _ := procGetStdHandle.Call(STD_OUTPUT_HANDLE) if stdout == 0 || stdout == uintptr(syscall.InvalidHandle) { return false } // 获取当前控制台模式 var mode uint32 ret, _, _ := procGetConsoleMode.Call(stdout, uintptr(unsafe.Pointer(&mode))) if ret == 0 { return false } // 启用虚拟终端处理 mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING // 设置新的控制台模式 ret, _, _ = procSetConsoleMode.Call(stdout, uintptr(mode)) if ret == 0 { return false } return true }