2026-06-22 11:33:18 +08:00
|
|
|
|
// 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 模块:通过 WinAPI(GetConsoleWindow + 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 // 显示窗口
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2026-06-22 22:31:36 +08:00
|
|
|
|
// cachedConsoleHwnd 在 initConsoleHwnd() 中缓存,避免 systray.Run() 后 GetConsoleWindow 返回 0。
|
|
|
|
|
|
var cachedConsoleHwnd uintptr
|
|
|
|
|
|
|
|
|
|
|
|
// initConsoleHwnd 在 main() 中提前调用,缓存控制台窗口句柄。
|
|
|
|
|
|
func initConsoleHwnd() {
|
2026-06-22 11:33:18 +08:00
|
|
|
|
hwnd, _, _ := getConsoleWindow.Call()
|
2026-06-22 22:31:36 +08:00
|
|
|
|
cachedConsoleHwnd = hwnd
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// hideConsoleWindow 隐藏控制台窗口。若无控制台则无操作。
|
|
|
|
|
|
func hideConsoleWindow() {
|
|
|
|
|
|
if cachedConsoleHwnd != 0 {
|
|
|
|
|
|
showWindowAsync.Call(cachedConsoleHwnd, SW_HIDE)
|
2026-06-22 11:33:18 +08:00
|
|
|
|
log.Debug().Msg("控制台窗口已隐藏")
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-06-22 22:31:36 +08:00
|
|
|
|
// showConsoleWindow 显示控制台窗口。若无控制台则无操作。
|
2026-06-22 11:33:18 +08:00
|
|
|
|
func showConsoleWindow() {
|
2026-06-22 22:31:36 +08:00
|
|
|
|
if cachedConsoleHwnd != 0 {
|
|
|
|
|
|
showWindowAsync.Call(cachedConsoleHwnd, SW_SHOW)
|
2026-06-22 11:33:18 +08:00
|
|
|
|
log.Debug().Msg("控制台窗口已显示")
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|