forked from go/golangs_learn
5 changed files with 288 additions and 15 deletions
@ -0,0 +1,53 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"github.com/lxn/walk" |
|||
"log" |
|||
) |
|||
|
|||
func main() { |
|||
mw, err := walk.NewMainWindow() |
|||
if err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
//托盘图标文件
|
|||
icon, err := walk.Resources.Icon("E:/icon.ico") |
|||
if err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
ni, err := walk.NewNotifyIcon(mw) |
|||
if err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
defer ni.Dispose() |
|||
if err := ni.SetIcon(icon); err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
if err := ni.SetToolTip("鼠标在icon上悬浮的信息."); err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
ni.MouseDown().Attach(func(x, y int, button walk.MouseButton) { |
|||
if button != walk.LeftButton { |
|||
return |
|||
} |
|||
if err := ni.ShowCustom("Walk 任务栏通知标题", "walk 任务栏通知内容", nil); err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
}) |
|||
exitAction := walk.NewAction() |
|||
if err := exitAction.SetText("右键icon的菜单按钮"); err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
//Exit 实现的功能
|
|||
exitAction.Triggered().Attach(func() { walk.App().Exit(0) }) |
|||
if err := ni.ContextMenu().Actions().Add(exitAction); err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
if err := ni.SetVisible(true); err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
if err := ni.ShowInfo("Walk NotifyIcon Example", "Click the icon to show again."); err != nil { |
|||
log.Fatal(err) |
|||
} |
|||
mw.Run() |
|||
} |
@ -0,0 +1,89 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"fmt" |
|||
"github.com/shirou/gopsutil/winservices" |
|||
"golang.org/x/sys/windows/svc/mgr" |
|||
"log" |
|||
) |
|||
|
|||
func main() { |
|||
s, err := NewWinService("GWY20_Mysql") |
|||
// s, err := NewWinService("GWY20_Tomcat")
|
|||
// s, err := NewWinService("nginx")
|
|||
if s == nil || err != nil { |
|||
log.Print("发生异常:", err) |
|||
return |
|||
} |
|||
err = s.StartService() |
|||
if err != nil { |
|||
log.Print("启动异常:", err) |
|||
} else { |
|||
log.Print("启动成功!") |
|||
} |
|||
} |
|||
|
|||
// 启动一个服务
|
|||
func (s *Service) StartService() error { |
|||
return StartService(s.Name) |
|||
} |
|||
|
|||
// 启动一个服务
|
|||
func StartService(name string) error { |
|||
m, err := mgr.Connect() |
|||
if err != nil { |
|||
return err |
|||
} |
|||
defer m.Disconnect() |
|||
s, err := m.OpenService(name) |
|||
if err != nil { |
|||
return fmt.Errorf("could not access service: %v", err) |
|||
} |
|||
defer s.Close() |
|||
err = s.Start("is", "manual-started") |
|||
if err != nil { |
|||
return fmt.Errorf("could not start service: %v", err) |
|||
} |
|||
return nil |
|||
} |
|||
|
|||
// 新建一个Service对象
|
|||
func NewWinService(serviceName string) (*Service, error) { |
|||
winService, err := winservices.NewService(serviceName) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
result := &Service{ |
|||
Name: serviceName, |
|||
srv: winService, |
|||
} |
|||
log.Print("测试问题:", result) |
|||
err = result.getServiceDetail() |
|||
return result, err |
|||
} |
|||
|
|||
// 定义Service对象
|
|||
type Service struct { |
|||
Name string |
|||
srv *winservices.Service |
|||
Config mgr.Config |
|||
Status winservices.ServiceStatus |
|||
} |
|||
|
|||
// 得到Service信息
|
|||
func (s *Service) getServiceDetail() error { |
|||
defer func() { |
|||
if err := recover(); err != nil { |
|||
return |
|||
} |
|||
}() |
|||
err := s.srv.GetServiceDetail() |
|||
if err != nil { |
|||
// 服务打开失败
|
|||
return err |
|||
} |
|||
s.Name = s.srv.Name |
|||
s.Status = s.srv.Status |
|||
s.Config = s.srv.Config |
|||
return nil |
|||
} |
Loading…
Reference in new issue