mirror of
https://github.com/multica-ai/multica.git
synced 2026-06-17 11:48:42 +02:00
37 lines
1.2 KiB
Go
37 lines
1.2 KiB
Go
//go:build windows
|
|
|
|
package util
|
|
|
|
import "syscall"
|
|
|
|
var (
|
|
kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
|
user32 = syscall.NewLazyDLL("user32.dll")
|
|
procAllocConsole = kernel32.NewProc("AllocConsole")
|
|
procGetConsoleWnd = kernel32.NewProc("GetConsoleWindow")
|
|
procShowWindow = user32.NewProc("ShowWindow")
|
|
)
|
|
|
|
const swHide = 0
|
|
|
|
// EnsureHiddenConsole guarantees the daemon owns a console that is not
|
|
// visible to the user. Every child process (git, cmd, etc.) inherits this
|
|
// hidden console automatically, so no per-call SysProcAttr gymnastics are
|
|
// needed.
|
|
//
|
|
// MUST be called at daemon startup before any child process is spawned —
|
|
// the inherited hidden console only protects children started after this
|
|
// returns. A child spawned earlier will allocate its own visible console
|
|
// window and reintroduce the popup-flash regression from #2357.
|
|
func EnsureHiddenConsole() {
|
|
if hwnd, _, _ := procGetConsoleWnd.Call(); hwnd != 0 {
|
|
return // already have a console
|
|
}
|
|
if r, _, _ := procAllocConsole.Call(); r == 0 {
|
|
return // AllocConsole failed
|
|
}
|
|
if hwnd, _, _ := procGetConsoleWnd.Call(); hwnd != 0 {
|
|
procShowWindow.Call(hwnd, swHide)
|
|
}
|
|
}
|