添加cmd彩色输出设置。
This commit is contained in:
49
golang/logUse/ansi/ansi_support_win.go
Normal file
49
golang/logUse/ansi/ansi_support_win.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user