Files
go-worm/lib/instance/console_windows.go
T

38 lines
720 B
Go
Raw Normal View History

//go:build windows
package instance
import (
"os"
"syscall"
)
var (
kernel32 = syscall.NewLazyDLL("kernel32.dll")
procFreeConsole = kernel32.NewProc("FreeConsole")
user32 = syscall.NewLazyDLL("user32.dll")
procShowWindow = user32.NewProc("ShowWindow")
)
const swHide = 0
// HideConsole hides any console window and detaches from it.
func HideConsole() {
hwnd, _, _ := kernel32.NewProc("GetConsoleWindow").Call()
if hwnd != 0 {
_, _, _ = procShowWindow.Call(hwnd, swHide)
}
_, _, _ = procFreeConsole.Call()
redirectStdioToNul()
}
func redirectStdioToNul() {
nul, err := os.OpenFile("NUL", os.O_RDWR, 0)
if err != nil {
return
}
os.Stdin = nul
os.Stdout = nul
os.Stderr = nul
}