golang隐藏window系统下自身cmd窗口

在最近开发工作中,需要隐藏父程序窗口,并用该程序去启动其他程序(包括exe程序,bat脚本等)
在网上收了一下,有网友说通过在编译go时加入参数: go build -ldflags=”-H windowsgui” 这样确实做到了隐藏程序窗口的目的。在测试过程中发现,这种写法,在win10中运行启动EXE程序和BAT脚本都是正常工作的。但是,在win7某些版本中,启动EXE程序正常,启动BAT脚本就不正常了。os.StartProcess函数返回值也没有报错,但就是bat程序没有执行。
于是,去掉-ldflags=”-H windowsgui参数,编译,再执行,又能在win7上面正常执行BAT脚本。猜测win7某些版本的批处理必须要求父进程窗口属性是显示的,可是有黑色的DOS窗口,这个不符合项目要求。
有一个折中的办法,就是在父程序启动之初,不要隐藏窗口,当程序完成了任务(启动其他子进程)后,再隐藏窗口。这样既能完成任务,有没黑窗口显示(会闪一下)。完美解决了问题。
贴上隐藏窗口的代码吧

import "github.com/gonutz/ide/w32"
//隐藏console
func HideConsole(){
	ShowConsoleAsync(w32.SW_HIDE)
}
//显示console
func ShowConsole(){
	ShowConsoleAsync(w32.SW_SHOW)
}
//
func ShowConsoleAsync(commandShow uintptr){
	console := w32.GetConsoleWindow()
	if console != 0 {
		_, consoleProcID := w32.GetWindowThreadProcessId(console)
		if w32.GetCurrentProcessId() == consoleProcID {
			w32.ShowWindowAsync(console, commandShow)
		}
	}
}

这里使用了github.com/gonutz/ide/w32包,使用代码前,应先安装这个包

你可能感兴趣的:(问题记录)