Files
SRCC/console_windows.go
T

51 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Copyright (c) 2026 S.A. (SNOWARE). Written for SCU Team.
// Licensed under MulanPubL-2.0.
// You may obtain a copy at: http://license.coscl.org.cn/MulanPubL-2.0
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND.
// console_windows 模块:通过 WinAPIGetConsoleWindow + ShowWindowAsync)控制控制台窗口的显示/隐藏。
package main
import (
"syscall"
)
// 预加载 WinAPI 所需的 DLL 和函数。
var (
kernel32 = syscall.NewLazyDLL("kernel32.dll")
user32 = syscall.NewLazyDLL("user32.dll")
getConsoleWindow = kernel32.NewProc("GetConsoleWindow")
showWindowAsync = user32.NewProc("ShowWindowAsync")
)
// ShowWindow 常量。
const (
SW_HIDE = 0 // 隐藏窗口
SW_SHOW = 5 // 显示窗口
)
// cachedConsoleHwnd 在 initConsoleHwnd() 中缓存,避免 systray.Run() 后 GetConsoleWindow 返回 0。
var cachedConsoleHwnd uintptr
// initConsoleHwnd 在 main() 中提前调用,缓存控制台窗口句柄。
func initConsoleHwnd() {
hwnd, _, _ := getConsoleWindow.Call()
cachedConsoleHwnd = hwnd
}
// hideConsoleWindow 隐藏控制台窗口。若无控制台则无操作。
func hideConsoleWindow() {
if cachedConsoleHwnd != 0 {
showWindowAsync.Call(cachedConsoleHwnd, SW_HIDE)
log.Debug().Msg("控制台窗口已隐藏")
}
}
// showConsoleWindow 显示控制台窗口。若无控制台则无操作。
func showConsoleWindow() {
if cachedConsoleHwnd != 0 {
showWindowAsync.Call(cachedConsoleHwnd, SW_SHOW)
log.Debug().Msg("控制台窗口已显示")
}
}