Go语言设计实现在任务栏里提醒你喝水的兔子
作者:六号积极分子 发布时间:2023-07-15 04:24:22
前言
之前看到 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 方式给自己的飞书通知消息,提醒该喝水了。
安装包
开发完之后就可以进行编译。不同的平台编译生成安装包还是不一样的。但在编译的时候还需要注意不同环境的区别:
首先需要打开环境配置:
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所以就没有实现更加壮观的结果。以上就是我实现的整个过程,有任何问题欢迎指正。
效果展示
来源:https://juejin.cn/post/7186504459214651450
猜你喜欢
- 利用MySQLfs这个工具,我么可以在MySQL关系数据库中存储文件系统。MySQLfs将文件系统中文件的字节内容分解成数据库中的元组,而数
- 开发中经常会遇得到需要多种条件组合查询的情况,比如有三个表,年级表Grade(GradeId,GradeName),班级Class(Clas
- Frontpage中的回车键有三种:enter、shift+enter、ctrl+enter。enter键对应于HTML中的<p>
- 数组去重复和数组排序'数组名次 Function Sort(ary,stra) KeepChecking =&n
- 本文实例讲述了php基于协程实现异步的方法。分享给大家供大家参考,具体如下:github上php的协程大部分是根据这篇文章实现的:http:
- 4款JavaScript放大镜特效脚本。准确的说,Anythingzoomer和Bezoom才是正宗的放大镜特效,当鼠标悬浮在图片上时,能放
- 做为一个专职的页面重构者, 我们从事的工作简单的说就是“将设计稿转换成WEB页面”,这一过程可以很简单到直接把PSD从里导出成网页;也可复杂
- 阅读:Dreamweaver量身打造Wordpress留言板(一)虽然说在Dreamweaver量身打造Wordpress留言板(二)这一篇
- sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdat
- explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句.使用方法:在sel
- 1、requests 的常见用法requests 除了 url 之外,还有 params, data 和 files 三个参数,用于和服务器
- 1 查找记录条数 select count(*) from table_name(换成表名)&nbs
- --SQL正则替换函数 代码如下:CREATE function dbo.regexReplace ( @source ntext, --
- 下面基础的解释一下这错误: 1:本质上的错误: object a;//a是Null对象 protected void Page_Load(o
- 此代码适合你做网站用,普通朋友可以不用理这个东西!ASP:<%dim objXMLHTTP, qq, pwd qq = &
- Erase语句:重新初始化固定数组的元素,并释放动态数组的存储空间。用法: Era
- 对文本类文件(*.txt;*.html;*.doc;等等),图片类文件(*.jpg;*.gif等等)直接点击链接时会在浏览器打开,而无法出现
- 昨天还和裕波沟通我没有准备ppt,想以另一种互动的方式来交流。后来想想,每个人都准备了,我不准备也不太好意思,呵呵。今天在webrebuil
- 想必大家都很喜欢用Word打字,用Excel进行计算和规划,用PowerPoint作幻灯片进行展示…,但是这只用到了Office系列产品的很
- 把你想加密的文档的源代码拷贝到下面的文本框内,按下生成按钮就可以得到一段加密了的页面代码,把代码复制到新的页面就可以了. [注意:可重复加密