package main import ( "flag" "fmt" "os" "os/exec" "strings" ) func main() { // 定义命令行参数 var message string var title string flag.StringVar(&message, "message", "", "通知消息内容") flag.StringVar(&title, "title", "提醒", "通知标题") flag.Parse() // 检查是否提供了消息参数 if message == "" { fmt.Println("请提供消息内容,使用 -message 参数") fmt.Println("用法: go run main.go -message \"你的消息\" [-title \"标题\"]") os.Exit(1) } // 发送系统通知 err := sendNotification(title, message) if err != nil { fmt.Printf("发送通知失败: %v\n", err) os.Exit(1) } fmt.Println("通知已发送") } // sendNotification 发送系统通知 func sendNotification(title, message string) error { // 检测操作系统并使用相应的通知命令 switch os := strings.ToLower(os.Getenv("OS")); os { case "windows_nt", "windows": return sendWindowsNotification(title, message) case "darwin": return sendMacNotification(title, message) default: // 假设是Linux系统 return sendLinuxNotification(title, message) } } // sendWindowsNotification 发送Windows系统通知 func sendWindowsNotification(title, message string) error { // 使用PowerShell的Toast通知 powershellCmd := fmt.Sprintf( "Add-Type -AssemblyName System.Windows.Forms; "+ "$notify = New-Object System.Windows.Forms.NotifyIcon; "+ "$notify.Icon = [System.Drawing.SystemIcons]::Information; "+ "$notify.BalloonTipTitle = '%s'; "+ "$notify.BalloonTipText = '%s'; "+ "$notify.Visible = $true; "+ "$notify.ShowBalloonTip(3000); "+ "Start-Sleep -Seconds 3", escapePowerShellString(title), escapePowerShellString(message), ) cmd := exec.Command("powershell.exe", "-Command", powershellCmd) return cmd.Run() } // sendMacNotification 发送macOS系统通知 func sendMacNotification(title, message string) error { cmd := exec.Command("osascript", "-e", fmt.Sprintf(`display notification "%s" with title "%s"`, message, title)) return cmd.Run() } // sendLinuxNotification 发送Linux系统通知 func sendLinuxNotification(title, message string) error { cmd := exec.Command("notify-send", title, message) return cmd.Run() } // escapePowerShellString 转义PowerShell字符串中的特殊字符 func escapePowerShellString(s string) string { s = strings.ReplaceAll(s, "'", "''") s = strings.ReplaceAll(s, "`", "``") s = strings.ReplaceAll(s, "\"", "`\"") return s }