forked from go/golangs_learn
VIVIMAN
3 years ago
5 changed files with 89 additions and 290 deletions
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 6.3 KiB |
Binary file not shown.
@ -1,265 +0,0 @@ |
|||||
// +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 |
|
||||
} |
|
@ -0,0 +1,43 @@ |
|||||
|
{ |
||||
|
"FixedFileInfo": { |
||||
|
"FileVersion": { |
||||
|
"Major": 1, |
||||
|
"Minor": 0, |
||||
|
"Patch": 0, |
||||
|
"Build": 0 |
||||
|
}, |
||||
|
"ProductVersion": { |
||||
|
"Major": 1, |
||||
|
"Minor": 0, |
||||
|
"Patch": 0, |
||||
|
"Build": 0 |
||||
|
}, |
||||
|
"FileFlagsMask": "3f", |
||||
|
"FileFlags ": "00", |
||||
|
"FileOS": "040004", |
||||
|
"FileType": "01", |
||||
|
"FileSubType": "00" |
||||
|
}, |
||||
|
"StringFileInfo": { |
||||
|
"Comments": "公务员服务", |
||||
|
"CompanyName": "北京神舟航天软件技术有限公司", |
||||
|
"FileDescription": "公务员服务运行监控软件", |
||||
|
"FileVersion": "v1.0", |
||||
|
"InternalName": "运行监控", |
||||
|
"LegalCopyright": "Copyright (c) 2021", |
||||
|
"LegalTrademarks": "", |
||||
|
"OriginalFilename": "HyServer.exe", |
||||
|
"PrivateBuild": "", |
||||
|
"ProductName": "监控软件", |
||||
|
"ProductVersion": "V2021_1.0.1", |
||||
|
"SpecialBuild": "" |
||||
|
}, |
||||
|
"VarFileInfo": { |
||||
|
"Translation": { |
||||
|
"LangID": "0409", |
||||
|
"CharsetID": "04B0" |
||||
|
} |
||||
|
}, |
||||
|
"IconPath": "main.ico", |
||||
|
"ManifestPath": "" |
||||
|
} |
Loading…
Reference in new issue