github.com/Mrs4s/go-cqhttp@v1.2.0/global/terminal/quick_edit_windows.go (about)

     1  package terminal
     2  
     3  import (
     4  	"os"
     5  
     6  	"golang.org/x/sys/windows"
     7  )
     8  
     9  var inputmode uint32
    10  
    11  // RestoreInputMode 还原输入模式
    12  func RestoreInputMode() error {
    13  	if inputmode == 0 {
    14  		return nil
    15  	}
    16  	stdin := windows.Handle(os.Stdin.Fd())
    17  	return windows.SetConsoleMode(stdin, inputmode)
    18  }
    19  
    20  // DisableQuickEdit 禁用快速编辑
    21  func DisableQuickEdit() error {
    22  	stdin := windows.Handle(os.Stdin.Fd())
    23  
    24  	var mode uint32
    25  	err := windows.GetConsoleMode(stdin, &mode)
    26  	if err != nil {
    27  		return err
    28  	}
    29  	inputmode = mode
    30  
    31  	mode &^= windows.ENABLE_QUICK_EDIT_MODE // 禁用快速编辑模式
    32  	mode |= windows.ENABLE_EXTENDED_FLAGS   // 启用扩展标志
    33  
    34  	mode &^= windows.ENABLE_MOUSE_INPUT    // 禁用鼠标输入
    35  	mode |= windows.ENABLE_PROCESSED_INPUT // 启用控制输入
    36  
    37  	mode &^= windows.ENABLE_INSERT_MODE                           // 禁用插入模式
    38  	mode |= windows.ENABLE_ECHO_INPUT | windows.ENABLE_LINE_INPUT // 启用输入回显&逐行输入
    39  
    40  	mode &^= windows.ENABLE_WINDOW_INPUT           // 禁用窗口输入
    41  	mode &^= windows.ENABLE_VIRTUAL_TERMINAL_INPUT // 禁用虚拟终端输入
    42  
    43  	return windows.SetConsoleMode(stdin, mode)
    44  }