添加cmd彩色输出设置。

This commit is contained in:
2026-03-23 11:01:29 +08:00
parent b7a99f6425
commit d18880c473
3 changed files with 59 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
//go:build !windows
// +build !windows
package ansi
// EnableANSIConsole 启用控制台 ANSI 转义序列支持
// 在非 Windows 系统上,默认已支持 ANSI 转义序列
func EnableANSIConsole() bool {
return true
}

View File

@@ -0,0 +1,49 @@
//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
}