Files
demoCode/golang/logUse/ansi/ansi_support_win.go

50 lines
1.1 KiB
Go
Raw Normal View History

2026-03-23 11:01:29 +08:00
//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
}