@@ -2,31 +2,41 @@ package main
22
33import (
44 "bytes"
5+ "golang.org/x/sys/windows"
6+ "os"
57 "strings"
68
79 "github.com/sirupsen/logrus"
8- "golang.org/x/sys/windows"
910)
1011
1112func init () {
12- k32 := windows .NewLazySystemDLL ( "kernel32.dll" )
13- getstdhandle := k32 . NewProc ( "GetStdHandle" )
14- magic := - 10
15- h , _ , err := getstdhandle . Call ( uintptr ( magic )) // STD_INPUT_HANDLE = ((DWORD)-10 )
16- if int ( h ) == 0 || int ( h ) == - 1 {
13+ stdin := windows .Handle ( os . Stdin . Fd () )
14+
15+ var mode uint32
16+ err := windows . GetConsoleMode ( stdin , & mode )
17+ if err != nil {
1718 panic (err )
1819 }
19- magic --
20- h , _ , err = k32 .NewProc ("SetConsoleMode" ).Call (h , uintptr (0x02a7 )) // 禁用快速编辑
21- if h == 0 {
20+
21+ mode &^= windows .ENABLE_QUICK_EDIT_MODE // 禁用快速编辑模式
22+ mode |= windows .ENABLE_EXTENDED_FLAGS // 启用扩展标志
23+
24+ err = windows .SetConsoleMode (stdin , mode )
25+ if err != nil {
2226 panic (err )
2327 }
24- h , _ , err = getstdhandle .Call (uintptr (magic )) // STD_OUTPUT_HANDLE = ((DWORD)-11)
25- if int (h ) == 0 || int (h ) == - 1 {
28+
29+ stdout := windows .Handle (os .Stdout .Fd ())
30+ err = windows .GetConsoleMode (stdout , & mode )
31+ if err != nil {
2632 panic (err )
2733 }
28- h , _ , err = k32 .NewProc ("SetConsoleMode" ).Call (h , uintptr (0x001f )) // 启用VT100
29- if h == 0 {
34+
35+ mode |= windows .ENABLE_VIRTUAL_TERMINAL_PROCESSING // 启用虚拟终端处理
36+ mode |= windows .ENABLE_PROCESSED_OUTPUT // 启用处理后的输出
37+
38+ err = windows .SetConsoleMode (stdout , mode )
39+ if err != nil {
3040 panic (err )
3141 }
3242 // windows 带颜色 log 自定义格式
0 commit comments