golang是一门高效的编程语言,具有内存安全等优势,因此越来越多的开发者开始使用这门语言进行开发。在golang中,可以通过系统调用来实现各种操作,其中一个有趣的功能是将golang应用程序隐藏到任务栏中。
隐藏到任务栏可以有效地保护应用程序的安全性,例如在某些情况下,我们可能不希望其他人知道我们正在运行的应用程序是哪个。当然,这个功能也可以用于改善用户体验,例如在使用一些工具类应用程序时,可以将其隐藏到任务栏中,从而不影响用户的正常使用。
实现这个功能的方法是通过Golang的系统调用来实现。具体来说,需要使用win32 API中的Shell_NotifyIcon函数来将应用程序放入任务栏。以下是实现代码:
package main
import (
"strconv"
"syscall"
"unsafe"
)
var (
user32 = syscall.MustLoadDLL("user32")
shell32 = syscall.MustLoadDLL("shell32")
kernel32 = syscall.MustLoadDLL("kernel32")
MessageBox = user32.MustFindProc("MessageBoxW")
_ = shell32.MustFindProc("Shell_NotifyIconW")
GetCurrentProcessID = kernel32.MustFindProc("GetCurrentProcessId")
)
type NOTIFYICONDATA struct {
cbSize uint32
hWnd syscall.Handle
uID uint32
uFlags uint32
uCallbackMessage uint32
hIcon syscall.Handle
szTip [128]uint16
}
const NIM_ADD = 0x00000000
const NIM_MODIFY = 0x00000001
const NIM_DELETE = 0x00000002
const NIF_MESSAGE = 0x00000001
const NIF_ICON = 0x00000002
const NIF_TIP = 0x00000004
func main() {
procId, _, _ := GetCurrentProcessID.Call()
hWnd := syscall.NewCallback(func(hwnd syscall.Handle, lParam uintptr) uintptr {
return 0
})
nid := NOTIFYICONDATA{}
nid.cbSize = uint32(unsafe.Sizeof(nid))
nid.hWnd = syscall.Handle(hWnd)
nid.uID = uint32(procId)
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP
nid.hIcon = syscall.Handle(syscall.GetModuleHandle(nil))
copy(nid.szTip[:], syscall.StringToUTF16("Golang 隐藏到任务栏"))
Shell_NotifyIcon(NIM_ADD, unsafe.Pointer(&nid))
MessageBox.Call(0, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("按 OK 关闭"))), 0)
Shell_NotifyIcon(NIM_DELETE, unsafe.Pointer(&nid))
}
func Shell_NotifyIcon(dwMessage uint32, pnid unsafe.Pointer) uint32 {
ret, _, _ := shell32.MustFindProc("Shell_NotifyIconW").Call(
uintptr(dwMessage),
uintptr(pnid),
)
return uint32(ret)
}在main函数中,我们首先调用GetCurrentProcessID获取当前进程的ID,然后创建一个syscall.Handle类型的值hWnd用于表示当前应用程序的句柄。然后创建NOTIFYICONDATA类型的变量nid,并将其相关属性设置好,其中包括uFlags为NIF_MESSAGE|NIF_ICON|NIF_TIP表示将应用程序放入任务栏中。接着调用Shell_NotifyIcon函数将应用程序放入任务栏中。
同时,我们也可以设置应用程序在任务栏中的提示信息。例如,我们将nid.szTip设置为"Golang 隐藏到任务栏",这样当用户将光标放在应用程序图标上时,就可以看到相应提示信息。
自定义设置的程度更高可以满足大部分中小型企业的建站需求,同时修正了上一版中发现的BUG,优化了核心的代码占用的服务器资源更少,执行速度比上一版更快 主要的特色功能如下: 1)特色的菜单设置功能,菜单设置分为顶部菜单和底部菜单,每一项都可以进行更名、选择是否隐 藏,排序等。 2)增加企业基本信息设置功能,输入的企业信息可以在网页底部的醒目位置看到。 3)增加了在线编辑功能,输入产品信息,企业介绍等栏
立即学习“go语言免费学习笔记(深入)”;
最后,我们在MessageBox.Call语句中等待用户按下OK键,这样应用程序就一直隐藏在任务栏中。当用户关闭应用程序时,我们再次调用Shell_NotifyIcon函数将应用程序从任务栏中删除即可。
总之,通过以上代码,我们可以轻松实现将Golang应用程序隐藏到任务栏中的功能。当然,如果需要隐藏其他类型的应用程序,同样也可以使用类似的方法来实现。









