前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go实现托盘程序

Go实现托盘程序

作者头像
ZGGSONG
发布2022-09-21 07:20:42
1.5K0
发布2022-09-21 07:20:42
举报
文章被收录于专栏:日志

前言

因工作需要,使用go实现一些小功能,黑窗的形式有过于呆板,且容易误关闭,此前也尝试过讲go打包成dll,随后通过C#编写界面及托盘的方式来运行 | 相关代码

托盘

这里使用的托盘库是蓝灯维护的一个项目https://github.com/getlantern/systray,没错就是你知道的那个蓝灯

官方定义为:在通知区域中放置图标和菜单的跨平台库

简单介绍一下使用以及关于托盘图标避坑

  • 使用还是非常简单的, 仓库readme中有代码
代码语言:javascript
复制
func main() {
    systray.Run(onReady, onExit)
}

func onReady() {
    systray.SetIcon(icon.Data)
    systray.SetTitle("Awesome App")
    systray.SetTooltip("Pretty awesome超级棒")
    mQuit := systray.AddMenuItem("Quit", "Quit the whole app")

    // Sets the icon of a menu item. Only available on Mac and Windows.
    mQuit.SetIcon(icon.Data)
}

func onExit() {
    // clean up here
}

使用步骤也很简单

代码语言:javascript
复制
go install github.com/cratonica/2goarray@latest
2goarray ImgData resources < icon.ico > resources.go

随后调用此生成的[]byte即可

注意: 在macos下png, ico转换出来的[]byte都可以使用, 而在windows下只能使用ico转换出来的[]byte, 详情查看issue

拓展

代码语言:javascript
复制
echo IDI_ICON1 ICON "icon.ico" > .\resources\icon.rc
windres -o icon.syso .\resources\icon.rc
  • go在打包的时候避免生成调试的命令行窗口, 更多go build命令详解
代码语言:javascript
复制
go build -ldflags="-H windowsgui"
代码语言:javascript
复制
func checkSingleton() (windows.Handle, error) {
    path, err := os.Executable()
    if err != nil {
        return 0, err
    }
    hashName := md5.Sum([]byte(path))
    name, err := syscall.UTF16PtrFromString("Local\\" + hex.EncodeToString(hashName[:]))
    if err != nil {
        return 0, err
    }
    return windows.CreateMutex(nil, false, name)
}

本文作者:ZGGSONG

本文链接:https://www.zggsong.cn/archives/go_app_in_notification_area.html

版权声明:本站所有未注明转载的文章均为原创,并采用CC BY-NV-SA 4.0授权协议,转载请注明来源

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 托盘
  • 拓展
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档