mysystray/main.go

107 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"fmt"
"github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/disk"
"github.com/shirou/gopsutil/v3/mem"
"time"
"github.com/distatus/battery"
"github.com/getlantern/systray"
)
func main() {
// 1. 创建系统托盘
systray.Run(onReady, onExit)
}
var mQuit *systray.MenuItem
var quitChans = make([]chan struct{}, 1)
var menuDict = make(map[string]*systray.MenuItem)
func onReady() {
maps := getBatterStatus()
sysinfo := getSystemInfo()
systray.SetTitle("电池电量:" + maps["Capacity"])
menuDict["battery.current"] = systray.AddMenuItem("当前电量:"+maps["Current"], "")
menuDict["battery.remain"] = systray.AddMenuItem("剩余容量:"+maps["Full"], "")
menuDict["battery.design"] = systray.AddMenuItem("设计容量:"+maps["Design"], "")
menuDict["system.cpu"] = systray.AddMenuItem("CPU使用率"+sysinfo["cpu"], "")
menuDict["system.memory"] = systray.AddMenuItem("内存使用率:"+sysinfo["memory"], "")
menuDict["system.disk"] = systray.AddMenuItem("磁盘使用率:"+sysinfo["disk"], "")
systray.AddSeparator()
mQuit = systray.AddMenuItem("退出", "")
go func() {
// 2. 监听退出菜单事件
<-mQuit.ClickedCh
// 3. 退出
systray.Quit()
fmt.Println("Quit now...")
}()
go func() {
ticker := time.NewTicker(10 * time.Second)
for _ = range ticker.C {
maps := getBatterStatus()
sysinfo := getSystemInfo()
systray.SetTitle("电池电量:" + maps["Capacity"])
menuDict["battery.current"].SetTitle("当前电量:" + maps["Current"])
menuDict["battery.remain"].SetTitle("剩余容量:" + maps["Full"])
menuDict["battery.design"].SetTitle("设计容量:" + maps["Design"])
menuDict["system.cpu"].SetTitle("CPU使用率" + sysinfo["cpu"])
menuDict["system.memory"].SetTitle("内存使用率:" + sysinfo["memory"])
menuDict["system.disk"].SetTitle("磁盘使用率:" + sysinfo["disk"])
}
}()
}
func onExit() {
// 退出时清理
// systray.Quit()
}
func getBatterStatus() map[string]string {
batteries, err := battery.GetAll()
if err != nil {
fmt.Println("Failed to get battery info:", err)
return nil
}
maps := make(map[string]string)
for _, bat := range batteries {
maps["Capacity"] = fmt.Sprintf("%.2f%%", bat.Current/bat.Full*100)
maps["Current"] = fmt.Sprintf("%.0f", bat.Current)
maps["Full"] = fmt.Sprintf("%.0f", bat.Full)
maps["Design"] = fmt.Sprintf("%.0f", bat.Design)
break
}
return maps
}
// 获取cpu内存磁盘使用情况
func getSystemInfo() map[string]string {
maps := make(map[string]string)
// 获取 CPU 利用率
cpuInfo, _ := cpu.Percent(time.Second, false)
maps["cpu"] = fmt.Sprintf("%.0f%%", cpuInfo[0])
// 获取内存使用率
memInfo, _ := mem.VirtualMemory()
maps["memory"] = fmt.Sprintf("%.0f%%", memInfo.UsedPercent)
// 获取磁盘使用率
diskInfo, _ := disk.Usage("/")
maps["disk"] = fmt.Sprintf("%.0f%%", diskInfo.UsedPercent)
return maps
}