[技巧分享] – 解决Go命令行程序 在Windows11下弹出命令行窗口问题

[技巧分享] – 解决Go命令行程序 在Windows11下弹出命令行窗口问题

起因

前几天在Github上随便找了个开源的shellcode加载器项目用 是使用Go编写的

这里并没有使用os/exec包或者类似的API 而是直接使用syscall调用Windows API

改了改编译运行发现使用Go编写的命令行程序在Windows11下会弹出命令行窗口GUI并且无法隐藏

解决方案

首先获取控制台窗口句柄

// 获取当前窗口句柄
	kernel32 := syscall.NewLazyDLL("kernel32.dll")
	getConsoleWindow := kernel32.NewProc("GetConsoleWindow")
	hwnd, _, _ := getConsoleWindow.Call()

这里使用GetConsoleWindow 函数返回当前进程的控制台窗口的句柄

如果返回的句柄为非零值说明存在窗口

// 隐藏窗口
	if hwnd != 0 {
		user32 := syscall.NewLazyDLL("user32.dll")
		showWindow := user32.NewProc("ShowWindow")
		const SW_HIDE = 0
		showWindow.Call(hwnd, SW_HIDE)
	}

然后使用 ShowWindow 函数更改窗口的可见状态

编译命令记得:-ldflags="-H windowsgui"

 

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片