From 0eb6e6a3835b8fedcbd85ef66c9eefbef6e5f97e Mon Sep 17 00:00:00 2001 From: VIVIMAN Date: Thu, 6 Jan 2022 10:34:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=A3=80=E6=B5=8B=E5=B7=A5?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- golang_learn/data_func/go_to_windows/main.go | 42 +-- golang_learn/data_func/go_to_windows/main.txt | 265 ++++++++++++++++++ .../data_func/go_to_windows/rsrc.syso | Bin 69138 -> 7464 bytes .../go_to_windows/serviceMonitor.ico | Bin 67646 -> 5972 bytes 4 files changed, 271 insertions(+), 36 deletions(-) create mode 100644 golang_learn/data_func/go_to_windows/main.txt diff --git a/golang_learn/data_func/go_to_windows/main.go b/golang_learn/data_func/go_to_windows/main.go index d4d96a0..409a825 100644 --- a/golang_learn/data_func/go_to_windows/main.go +++ b/golang_learn/data_func/go_to_windows/main.go @@ -28,21 +28,17 @@ type myService struct { } var app myApp -var service1, service2, service3 myService +var service1, service3 myService func init() { - app.title = "XXXX管理系统-运行监控" + app.title = "公务员管理系统-运行监控" service1 = myService{ - text: "MySql51(MySql数据库)", - serviceName: "MySql51", - } - service2 = myService{ - text: "Web服务(nginx)", - serviceName: "nginx", + text: "数据存储库", + serviceName: "GWY20_Mysql", } service3 = myService{ - text: "XXXX系统", - serviceName: "xxxx-server", + text: "公务员系统", + serviceName: "GWY20_Tomcat", } } @@ -53,7 +49,6 @@ func main() { walk.App().SetOrganizationName("dwt") _ = service1.labelState.SetText("未安装") - _ = service2.labelState.SetText("未安装") _ = service3.labelState.SetText("未安装") service1.btnStart.Clicked().Attach(func() { startService(service1) @@ -61,12 +56,6 @@ func main() { service1.btnStop.Clicked().Attach(func() { stopService(service1) }) - service2.btnStart.Clicked().Attach(func() { - startService(service2) - }) - service2.btnStop.Clicked().Attach(func() { - stopService(service2) - }) service3.btnStart.Clicked().Attach(func() { startService(service3) }) @@ -75,7 +64,6 @@ func main() { }) go flushServiceStat(service1) - go flushServiceStat(service2) go flushServiceStat(service3) app.mw.Show() @@ -179,24 +167,6 @@ func getWindows() error { }, }, }, - Label{Text: service2.text}, - Label{AssignTo: &service2.labelState, Text: "正在运行"}, - Composite{ - Layout: HBox{}, - MaxSize: Size{132, 30}, - Children: []Widget{ - PushButton{ - AssignTo: &service2.btnStop, - MaxSize: Size{60, 30}, - Text: "停止", - }, - PushButton{ - AssignTo: &service2.btnStart, - MaxSize: Size{60, 30}, - Text: "启动", - }, - }, - }, }, }, GroupBox{ diff --git a/golang_learn/data_func/go_to_windows/main.txt b/golang_learn/data_func/go_to_windows/main.txt new file mode 100644 index 0000000..9d66688 --- /dev/null +++ b/golang_learn/data_func/go_to_windows/main.txt @@ -0,0 +1,265 @@ +// +build windows +// +build 386 +package main + +import ( + "fmt" + "github.com/lxn/walk" + . "github.com/lxn/walk/declarative" + "github.com/lxn/win" + "golang.org/x/sys/windows" + "os/exec" + "syscall" + "time" +) + +type myApp struct { + title string + msg *walk.TextEdit + mw *walk.MainWindow +} + +type myService struct { + text string + serviceName string + labelState *walk.Label + btnStart *walk.PushButton + btnStop *walk.PushButton +} + +var app myApp +var service1, service2, service3 myService + +func init() { + app.title = "XXXX管理系统-运行监控" + service1 = myService{ + text: "数据存储库", + serviceName: "GWY20_Mysql", + } + service2 = myService{ + text: "Web服务(nginx)", + serviceName: "nginx", + } + service3 = myService{ + text: "公务员系统", + serviceName: "GWY20_Tomcat", + } +} + +func main() { + _ = getWindows() + + walk.App().SetProductName(app.title) + walk.App().SetOrganizationName("dwt") + + _ = service1.labelState.SetText("未安装") + _ = service2.labelState.SetText("未安装") + _ = service3.labelState.SetText("未安装") + service1.btnStart.Clicked().Attach(func() { + startService(service1) + }) + service1.btnStop.Clicked().Attach(func() { + stopService(service1) + }) + service2.btnStart.Clicked().Attach(func() { + startService(service2) + }) + service2.btnStop.Clicked().Attach(func() { + stopService(service2) + }) + service3.btnStart.Clicked().Attach(func() { + startService(service3) + }) + service3.btnStop.Clicked().Attach(func() { + stopService(service3) + }) + + go flushServiceStat(service1) + go flushServiceStat(service2) + go flushServiceStat(service3) + + app.mw.Show() + app.mw.Run() +} + +func setServiceState(service myService, msg string, btnStartStatus bool, btnStopStatus bool) { + _ = service.labelState.SetText(msg) + service.btnStart.SetEnabled(btnStartStatus) + service.btnStop.SetEnabled(btnStopStatus) +} + +// 刷新服务状态的协程程序 +func flushServiceStat(service myService) { + for { + winService, err := NewWinService(service.serviceName) + if winService == nil || err != nil { + if err == windows.ERROR_SERVICE_DOES_NOT_EXIST { + setServiceState(service, "未安装", false, false) + } else { + setServiceState(service, "服务打开失败", false, false) + } + } else { + if winService.IsStop() { + setServiceState(service, "已经停止", true, false) + } else if winService.IsRunning() { + setServiceState(service, "正在运行", false, true) + } + } + time.Sleep(time.Second) + } +} + +// 启动服务 +func startService(service myService) { + s, err := NewWinService(service.serviceName) + if s == nil || err != nil { + return + } + showMsg(service.serviceName + " 服务开始启动......") + err = s.StartService() + if err != nil { + showMsg(service.serviceName + " 服务启动失败!") + } else { + showMsg(service.serviceName + " 服务启动成功。") + } +} + +// 停止服务 +func stopService(service myService) { + s, err := NewWinService(service.serviceName) + if s == nil || err != nil { + return + } + showMsg(service.serviceName + " 服务开始停止......") + err = s.StopService() + if err != nil { + showMsg(service.serviceName + " 服务停止失败!") + } else { + showMsg(service.serviceName + " 服务停止成功。") + } +} + +func showMsg(msg string) { + app.msg.AppendText(time.Now().Format("2006-01-02 15:04:05 ")) + app.msg.AppendText(msg) + app.msg.AppendText("\r\n") +} + +// 初始始化窗体 +func getWindows() error { + icon, _ := walk.NewIconFromResourceId(3) + err := MainWindow{ + Visible: false, + AssignTo: &app.mw, + Title: app.title, + Size: Size{500, 360}, + Font: Font{Family: "微软雅黑", PointSize: 9}, + Icon: icon, + Layout: VBox{}, + Children: []Widget{ + GroupBox{ + Title: "基础服务状态", + Layout: Grid{Columns: 3}, + Children: []Widget{ + Label{Text: service1.text, MinSize: Size{220, 30}, TextColor: walk.RGB(255, 255, 0)}, + Label{AssignTo: &service1.labelState, Text: "正在运行", MinSize: Size{80, 30}}, + Composite{ + Layout: HBox{}, + MaxSize: Size{132, 30}, + Children: []Widget{ + PushButton{ + AssignTo: &service1.btnStop, + MaxSize: Size{60, 30}, + Text: "停止", + }, + PushButton{ + AssignTo: &service1.btnStart, + MaxSize: Size{60, 30}, + Text: "启动", + }, + }, + }, + Label{Text: service2.text}, + Label{AssignTo: &service2.labelState, Text: "正在运行"}, + Composite{ + Layout: HBox{}, + MaxSize: Size{132, 30}, + Children: []Widget{ + PushButton{ + AssignTo: &service2.btnStop, + MaxSize: Size{60, 30}, + Text: "停止", + }, + PushButton{ + AssignTo: &service2.btnStart, + MaxSize: Size{60, 30}, + Text: "启动", + }, + }, + }, + }, + }, + GroupBox{ + Title: "业务服务状态", + Layout: Grid{Columns: 3}, + Children: []Widget{ + Label{Text: service3.text, MinSize: Size{220, 30}}, + Label{AssignTo: &service3.labelState, Text: "正在运行", MinSize: Size{80, 30}}, + Composite{ + Layout: HBox{}, + MaxSize: Size{132, 30}, + Children: []Widget{ + PushButton{ + AssignTo: &service3.btnStop, + MaxSize: Size{60, 30}, + Text: "停止", + }, + PushButton{ + AssignTo: &service3.btnStart, + MaxSize: Size{60, 30}, + Text: "启动", + }, + }, + }, + }, + }, + TextEdit{AssignTo: &app.msg, VScroll: true, ReadOnly: true}, + Composite{ + Layout: HBox{}, + Children: []Widget{ + PushButton{ + MinSize: Size{160, 30}, + Text: "打开windows服务管理程序", + OnClicked: func() { + c := exec.Command("cmd", "/C", "SERVICES.MSC") + c.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // 不显示命令窗口 + if err := c.Start(); err != nil { + showMsg(fmt.Sprintf("打开windows服务管理程序失败, 错误信息: %s", err)) + } + }, + }, + HSpacer{}, + PushButton{ + MinSize: Size{121, 30}, + Text: "关闭本监控窗口", + OnClicked: func() { + walk.App().Exit(0) + }, + }, + }, + }, + }, + OnSizeChanged: func() { + _ = app.mw.SetSize(walk.Size(Size{500, 360})) + }, + }.Create() + winLong := win.GetWindowLong(app.mw.Handle(), win.GWL_STYLE) + // 不能调整窗口大小,禁用最大化按钮 + win.SetWindowLong(app.mw.Handle(), win.GWL_STYLE, winLong & ^win.WS_SIZEBOX & ^win.WS_MAXIMIZEBOX & ^win.WS_SIZEBOX) + // 设置窗体生成在屏幕的正中间,并处理高分屏的情况 + // 窗体横坐标 = ( 屏幕宽度 - 窗体宽度 ) / 2 + // 窗体纵坐标 = ( 屏幕高度 - 窗体高度 ) / 2 + _ = app.mw.SetX((int(win.GetSystemMetrics(0)) - app.mw.Width()) / 2 / app.mw.DPI() * 96) + _ = app.mw.SetY((int(win.GetSystemMetrics(1)) - app.mw.Height()) / 2 / app.mw.DPI() * 96) + return err +} diff --git a/golang_learn/data_func/go_to_windows/rsrc.syso b/golang_learn/data_func/go_to_windows/rsrc.syso index c5b0a406040af7b8002c3d59aa0723b55c5d3167..7923060ad0c101f132be14c91a95368b4fdcf244 100644 GIT binary patch delta 6100 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 literal 69138 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 diff --git a/golang_learn/data_func/go_to_windows/serviceMonitor.ico b/golang_learn/data_func/go_to_windows/serviceMonitor.ico index 0cf91e521dd100f32b7276e6ee0d876979637337..2a088ca4fd6b27671176f405e8de5077388426ba 100644 GIT binary patch literal 5972 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 literal 67646 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