Go語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)在任務(wù)欄里提醒你喝水的兔子
前言
之前看到 RunCat 一只可以在電腦上奔跑貓,其主要的功能是監(jiān)控電腦的CPU、內(nèi)存的使用情況,使用越多跑的越快。所以準(zhǔn)備做一只在任務(wù)欄里的兔子,主要使用 Go 語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的到點(diǎn)拜年的兔子。
詳細(xì)設(shè)計(jì)
基本需求:
- 打開應(yīng)用時(shí)可以在任務(wù)欄里顯示
- 實(shí)現(xiàn)動(dòng)態(tài)兔子生成
實(shí)現(xiàn)一只在任務(wù)欄里的兔子?;揪褪且粋€(gè)應(yīng)用的圖標(biāo),并且圖標(biāo)是動(dòng)態(tài)變化的。使用 Go 開發(fā)的話可以使用 systray 工具包,能夠支持在任務(wù)欄里顯示圖標(biāo)。
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", "退出應(yīng)用") mTip1 := systray.AddMenuItem("change", "圖標(biāo)更新") go func() { for { select { case <-mQuit.ClickedCh: systray.Quit() return case <-mTip1.ClickedCh: var data [][]byte picData := getIcon() systray.SetIcon(picData) } } }() }
以上代碼就是打開應(yīng)用時(shí)先使用默認(rèn)的圖標(biāo),點(diǎn)擊圖標(biāo)更新時(shí)就可以實(shí)現(xiàn)圖標(biāo)的變更。主要使用了設(shè)置圖標(biāo)的方法是 systray.SetIcon([]byte)
。
需要注意,如果不是使用 ico 格式的圖標(biāo)可能會(huì)發(fā)生以下的錯(cuò)誤:
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.
完成圖標(biāo)更新的需求后就可以進(jìn)一步實(shí)現(xiàn)動(dòng)態(tài)圖標(biāo)變更,從而實(shí)現(xiàn)一只能動(dòng)的拜年兔子。實(shí)現(xiàn)動(dòng)態(tài)化基本思路就是多張動(dòng)作圖片不斷地循環(huán)從而實(shí)現(xiàn)動(dòng)態(tài)。簡(jiǎn)單的實(shí)現(xiàn)就是可以將多個(gè)圖片都加載進(jìn)來(lái),然后使用循環(huán):
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 定時(shí)任務(wù)去執(zhí)行,這樣就可以對(duì)定時(shí)任務(wù)進(jìn)行控制,想開就開,想關(guān)就關(guān)。
基本實(shí)現(xiàn)到這里就是完成了一個(gè)簡(jiǎn)單的任務(wù)欄顯示功能,但我在里面增加一個(gè)可以定時(shí)通過(guò) webhook 方式給自己的飛書通知消息,提醒該喝水了。
詳細(xì)飛書 webhook 的方式可以參考自己寫過(guò)的文章:http://www.dbjr.com.cn/article/272249.htm
安裝包
開發(fā)完之后就可以進(jìn)行編譯。不同的平臺(tái)編譯生成安裝包還是不一樣的。但在編譯的時(shí)候還需要注意不同環(huán)境的區(qū)別:
首先需要打開環(huán)境配置:
env GO111MODULE=on go build
Window
go build -ldflags -H=windowsgui
MacOS
在macOS,需要先創(chuàng)建一個(gè)應(yīng)用程序二進(jìn)制包包裝;基本的文件配置是
SystrayApp.app/ Contents/ Info.plist MacOS/ go-executable Resources/ SystrayApp.icns
這里主要實(shí)現(xiàn)了在任務(wù)欄兔子生成的效果,可以繼續(xù)迭代升級(jí),比如監(jiān)控系統(tǒng)的狀態(tài)、或者進(jìn)行一些異步的工作,通知事件或者其他的功能。因?yàn)槲也簧瞄L(zhǎng)做UI所以就沒有實(shí)現(xiàn)更加壯觀的結(jié)果。以上就是我實(shí)現(xiàn)的整個(gè)過(guò)程,有任何問(wèn)題歡迎指正。
效果展示
以上就是Go語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)在任務(wù)欄里提醒你喝水的兔子的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言設(shè)計(jì)任務(wù)欄提醒喝水的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go?Ticker?周期性定時(shí)器用法及實(shí)現(xiàn)原理詳解
這篇文章主要為大家介紹了Go?Ticker?周期性定時(shí)器用法及實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解
這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)單元測(cè)試與性能測(cè)試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步2021-11-11Go語(yǔ)言CSP并發(fā)模型實(shí)現(xiàn)MPG
這篇文章主要為大家介紹了Go語(yǔ)言CSP并發(fā)模型實(shí)現(xiàn)MPG圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05golang控制結(jié)構(gòu)select機(jī)制及使用示例詳解
這篇文章主要介紹了golang控制結(jié)構(gòu)select機(jī)制及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Go語(yǔ)言的文件名、標(biāo)識(shí)符、關(guān)鍵字和包基礎(chǔ)教程
Go的關(guān)鍵字不能被用作標(biāo)識(shí)符,這是一個(gè)重要的限制,以避免命名沖突和語(yǔ)法混淆,這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言文件名、標(biāo)識(shí)符、關(guān)鍵字和包的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06