用Go实现任务栏里的兔子

简介: 之前看到 RunCat 一只可以在电脑上奔跑猫,其主要的功能是监控电脑的CPU、内存的使用情况,使用越多跑的越快。所以准备做一只在任务栏里的兔子,主要使用 Go 语言实现一个简单的到点拜年的兔子。基本需求:- 打开应用时可以在任务栏里显示- 实现动态兔子生成

前言

之前看到 RunCat 一只可以在电脑上奔跑猫,其主要的功能是监控电脑的CPU、内存的使用情况,使用越多跑的越快。所以准备做一只在任务栏里的兔子,主要使用 Go 语言实现一个简单的到点拜年的兔子。

详细设计

基本需求:

  • 打开应用时可以在任务栏里显示
  • 实现动态兔子生成

实现一只在任务栏里的兔子。基本就是一个应用的图标,并且图标是动态变化的。使用 Go 开发的话可以使用 systray 工具包,能够支持在任务栏里显示图标。

 go get github.com/getlantern/systray

需要使用 goV1.12版本以上。安装完后就可以在 main 文件中加入方法

func main() {
    systray.Run(onReady, onExit)
}

func onReady() {
    systray.SetIcon(icon.Data) // 
    systray.SetTitle("HappyRabbit")
    systray.SetTooltip("Happy New Year")
    mQuit := systray.AddMenuItem("Quit", "退出应用")
    mTip1 := systray.AddMenuItem("change", "图标更新")

        go func() {
        for {
            select {
            case <-mQuit.ClickedCh:
                systray.Quit()
                return
            case <-mTip1.ClickedCh:
                var data [][]byte
                picData := getIcon()
                systray.SetIcon(picData)
            }
        }
    }()
}

以上代码就是打开应用时先使用默认的图标,点击图标更新时就可以实现图标的变更。主要使用了设置图标的方法是 systray.SetIcon([]byte)

需要注意,如果不是使用 ico 格式的图标可能会发生以下的错误:

ERROR systray: systray_windows.go:845 Unable to set icon: The volume for a file has been externally altered so that the opened file is no longer valid. 

完成图标更新的需求后就可以进一步实现动态图标变更,从而实现一只能动的拜年兔子。实现动态化基本思路就是多张动作图片不断地循环从而实现动态。简单的实现就是可以将多个图片都加载进来,然后使用循环:

var data [][]byte
data1, _ := getIcon("./images/1.ico")
data2, _ := getIcon("./images/4.ico")
data3, _ := getIcon("./images/5.ico")
data = append(data, data1)
data = append(data, data2)
data = append(data, data3)

go func() { // 异步处理
    index := 0
    for {
        systray.SetIcon(data[index])
        time.Sleep(time.Second * 2)
        index++
        if index == 2 {
            index = 0
        }
    }
}()

以上更好的方式,我觉得可以使用 corn 定时任务去执行,这样就可以对定时任务进行控制,想开就开,想关就关。

基本实现到这里就是完成了一个简单的任务栏显示功能,但我在里面增加一个可以定时通过 webhook 方式给自己的飞书通知消息,提醒该喝水了。详细飞书 webhook 的方式可以参考自己写过的文章:https://juejin.cn/post/7024357272461672478

安装包

开发完之后就可以进行编译。不同的平台编译生成安装包还是不一样的。但在编译的时候还需要注意不同环境的区别:

首先需要打开环境配置:env GO111MODULE=on go build

Window

go build -ldflags -H=windowsgui

MacOS

在macOS,需要先创建一个应用程序二进制包包装;基本的文件配置是

SystrayApp.app/
  Contents/
    Info.plist
    MacOS/
      go-executable
    Resources/
      SystrayApp.icns

这里主要实现了在任务栏兔子生成的效果,可以继续迭代升级,比如监控系统的状态、或者进行一些异步的工作,通知事件或者其他的功能。因为我不擅长做UI所以就没有实现更加壮观的结果。以上就是我实现的整个过程,有任何问题欢迎指正。

效果展示

112.gif

目录
相关文章
|
缓存 编解码 JavaScript
在JavaScript小游戏开发中,如何优化游戏性能,比如减少重绘、提高动画流畅度?
提升JavaScript游戏性能的关键点包括:使用requestAnimationFrame优化动画流畅度;减少DOM操作,利用DocumentFragment或虚拟DOM;使用Canvas/WebGL高效渲染;优化图像资源,压缩图片和使用雪碧图;分层渲染与视口裁剪减少无效绘制;借助Web Workers进行后台计算;缓存计算结果;合理添加事件监听器并采用事件委托;定期进行性能分析以找到并解决瓶颈。不断测试与调整是优化的关键。
664 4
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
685 0
|
存储 NoSQL Redis
【360开源】Pika最佳实践
Pika是360 热门的c++开源项目,基于rocksdb开发的大容量类Redis存储,力求在完全兼容Redis协议、继承Redis便捷运维设计的前提下通过持久化存储方式解决Redis在大容量场景下主从同步代价高、恢复时间慢、单线程相对脆弱、内存成本高等问题。
3390 0
|
4月前
|
数据采集 人工智能 监控
AI应用的开发流程
AI应用开发需遵循“需求定义→模型选型→提示工程→RAG增强→工作流编排→评估优化→部署交付”闭环流程,覆盖从轻量智能体到垂直行业解决方案的全生命周期,强调数据驱动、工程落地与持续迭代。(239字)
|
人工智能 移动开发 JavaScript
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
2103 18
|
8月前
|
人工智能 前端开发 JavaScript
GLM-4.7实战指南:三个梯度测试,解锁国产大模型的代码生成与审美上限
国产大模型 GLM-4.7 在前端代码生成与智能体编程(Agentic Coding)上实现突破,凭借强大的逻辑推理、UI 审美与交互设计能力,可媲美 Claude 3.5 Sonnet。实测显示,其在 SVG 生成、网页游戏开发及高级页面设计中表现惊艳,支持长上下文、高性价比 API,成为开发者高效落地 AI 编程的优选工具。
GLM-4.7实战指南:三个梯度测试,解锁国产大模型的代码生成与审美上限
|
NoSQL 算法 JavaScript
一种优雅的方式整合限流、幂等、防盗刷
在工作中,接口防盗刷至关重要,尤其对于短信发送等高风险接口。本文以发送短信接口为例,探讨了仅校验手机号的局限性,并提出基于Ticket机制的解决方案。客户端需先申请Ticket,服务端通过UserAgent、IP等判断请求合法性,生成加密的Ticket。客户端携带Ticket调用接口,并可能需通过图形验证码验证。此方案实现限流、幂等性和防盗刷,适用于多种接口,提升安全性。同时,建议减少明显错误提示,增加破解难度。
782 5
一种优雅的方式整合限流、幂等、防盗刷
|
存储 弹性计算 人工智能
2025年阿里云企业云服务器ECS选购与配置全攻略
本文介绍了阿里云服务器的核心配置选择方法论,涵盖算力需求分析、网络与存储设计、地域部署策略三大维度。针对不同业务场景,如初创企业官网和AI模型训练平台,提供了具体配置方案。同时,详细讲解了购买操作指南及长期运维优化建议,帮助用户快速实现业务上云并确保高效运行。访问阿里云官方资源聚合平台可获取更多最新产品动态和技术支持。
|
数据可视化 数据挖掘 数据处理
进阶 pandas DataFrame:挖掘高级数据处理技巧
【5月更文挑战第19天】本文介绍了Pandas DataFrame的高级使用技巧,包括数据重塑(如`pivot`和`melt`)、字符串处理(如提取和替换)、日期时间处理(如解析和时间序列操作)、合并与连接(如`merge`和`concat`),以及使用`apply()`应用自定义函数。这些技巧能提升数据处理效率,适用于复杂数据分析任务。推荐进一步学习和探索Pandas的高级功能。
|
存储 前端开发 JavaScript
浅谈Web前端安全策略xss和csrf,及又该如何预防?
该文章详细讨论了Web前端安全中的XSS(跨站脚本攻击)和CSRF(跨站请求伪造)攻击原理及其防范措施,帮助读者了解如何保护Web应用程序免受这两种常见安全威胁的影响。
浅谈Web前端安全策略xss和csrf,及又该如何预防?

热门文章

最新文章