b1.3 Fix hide/show console window for only once.

This commit is contained in:
2026-06-22 22:31:36 +08:00
parent 1a6df73d3c
commit a4b350d2e3
2 changed files with 24 additions and 14 deletions
+15 -8
View File
@@ -24,20 +24,27 @@ const (
SW_SHOW = 5 // 显示窗口 SW_SHOW = 5 // 显示窗口
) )
// hideConsoleWindow 获取当前控制台句柄并隐藏窗口。若无控制台则无操作 // cachedConsoleHwnd 在 initConsoleHwnd() 中缓存,避免 systray.Run() 后 GetConsoleWindow 返回 0
func hideConsoleWindow() { var cachedConsoleHwnd uintptr
// initConsoleHwnd 在 main() 中提前调用,缓存控制台窗口句柄。
func initConsoleHwnd() {
hwnd, _, _ := getConsoleWindow.Call() hwnd, _, _ := getConsoleWindow.Call()
if hwnd != 0 { cachedConsoleHwnd = hwnd
showWindowAsync.Call(hwnd, SW_HIDE) }
// hideConsoleWindow 隐藏控制台窗口。若无控制台则无操作。
func hideConsoleWindow() {
if cachedConsoleHwnd != 0 {
showWindowAsync.Call(cachedConsoleHwnd, SW_HIDE)
log.Debug().Msg("控制台窗口已隐藏") log.Debug().Msg("控制台窗口已隐藏")
} }
} }
// showConsoleWindow 获取当前控制台句柄并显示窗口。若无控制台则无操作。 // showConsoleWindow 显示控制台窗口。若无控制台则无操作。
func showConsoleWindow() { func showConsoleWindow() {
hwnd, _, _ := getConsoleWindow.Call() if cachedConsoleHwnd != 0 {
if hwnd != 0 { showWindowAsync.Call(cachedConsoleHwnd, SW_SHOW)
showWindowAsync.Call(hwnd, SW_SHOW)
log.Debug().Msg("控制台窗口已显示") log.Debug().Msg("控制台窗口已显示")
} }
} }
+9 -6
View File
@@ -21,6 +21,7 @@ func main() {
initLogger() initLogger()
log.Info().Msg("程序启动") log.Info().Msg("程序启动")
initConsoleHwnd()
hideConsoleWindow() hideConsoleWindow()
p := NewPermission() p := NewPermission()
@@ -83,16 +84,18 @@ func onReady() {
// 显示控制台 → 调用 showConsoleWindow() // 显示控制台 → 调用 showConsoleWindow()
go func() { go func() {
<-mShowConsoleWindow.ClickedCh for range mShowConsoleWindow.ClickedCh {
log.Info().Msg("用户点击显示控制台窗口") log.Info().Msg("用户点击显示控制台窗口")
showConsoleWindow() showConsoleWindow()
}
}() }()
// 隐藏控制台 → 调用 hideConsoleWindow() // 隐藏控制台 → 调用 hideConsoleWindow()
go func() { go func() {
<-mHideConsoleWindow.ClickedCh for range mHideConsoleWindow.ClickedCh {
log.Info().Msg("用户点击隐藏控制台窗口") log.Info().Msg("用户点击隐藏控制台窗口")
hideConsoleWindow() hideConsoleWindow()
}
}() }()
} }