Commit 0a7cbf9e by 陶腾飞

v1.4.0更新图标显示/隐藏工具,优化exec消息处理逻辑,优化企业微信知微运维平台

parent a1412dfe
......@@ -42,10 +42,10 @@ func deamonRun(){
conn.Write(rec)
// 关闭连接
if err := conn.Close() ; err!= nil{
if err := conn.Close(); err != nil {
pub.PntInfo(err)
}
continue
}else{
pub.PntError(" Listen Error", err)
}
......
......@@ -8,7 +8,7 @@ const DaemonListen string = ":" + DaemonPort
const ADServerDaemon string = Host_adserver + DaemonListen
const WxwrokDaemon string = ":16823"
const RandMax int = 60
const Version string = "1.3.1"
const Version string = "1.4.0"
// user //
......
......@@ -29,14 +29,6 @@ func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte {
PntBackup(string(unmsg))
ParseJsonBody(unmsg,&pmsg)
ret = pmsg.Msg_Deal()
// 注册表 消息
case Msg_Reg:
var pmsg MJreg
PntReg(string(unmsg))
ParseJsonBody(unmsg,&pmsg)
ret = pmsg.Msg_Deal()
// 错误 消息
case Msg_Error:
PntError(string(unmsg))
......@@ -71,38 +63,13 @@ func (rep *MJreport)Msg_Deal() interface{} {
if !IsPrimaryUser(rep.Username) || RunAsPC(rep.Username){
return nil
}
// isbak := false
// time:= rep.Reg_Query_AC(Reg_Name_BackupOverTime)
// // 第一次备份
// if time == "" {
// isbak= true
// } else if s,err := ParseTime(time);err !=nil{
// isbak= false
// PntError(err)
// // 第N次备份
// } else {
// // 下班点之后吗?
// if s.Hour() >= 15{
// isbak= true
// }else {
// isbak= false
// }
// }
// if isbak {
// }else{
// return GJexecAck(Msg_Exec_TurnOffPC)
// }
return GJbackup()
case Msg_Report_OverBak:
rep.Reg_Write_ADDC(Reg_Name_BackupOverTime,UnixTimeParse(&rep.Timestamp))
rep.Pskill(App_Sync)
SysMsgBox(rep.Computername,`备份完成,即将关机,如需取消关机,运行Z:\tools\【工具】取消关机.bat或在小工具-电源管理-取消自动关机`)
return GJexecAck(Msg_Exec_TurnOffPC)
return GJexec(Msg_Exec_TurnOffPC)
case Msg_Report_WillTurnOffPC:
rep.Reg_Write_ADDC(
......@@ -165,52 +132,59 @@ func (rep *MJreport)Msg_Deal() interface{} {
}
// 关于 exec 执行 的 消息处理
func (exec *MJexec)Msg_Deal()interface{}{
exec.IfDelay = false
// 状态变更
switch exec.Status {
case Msg_Exec_State_Request:
exec.Status = Msg_Exec_State_Ack
case Msg_Exec_State_Ack:
exec.Status = Msg_Exec_State_Over
case Msg_Exec_State_Over:
if exec.IfMsg {Msg(exec.Explain)}
return nil
}
// 消息处理
switch exec.Instruction{
case Msg_Exec_TurnOffPC:
exec.Command = Msg_Exec_TurnOffPC_cmd
exec.PsExec()
exec.Status = Msg_Exec_State_Over
case Msg_Exec_CancelTurnOffPC:
exec.Command = Msg_Exec_CancelTurnOffPC_cmd
exec.PsExec()
exec.Status = Msg_Exec_State_Over
case Msg_Exec_LogOffUser:
exec.Command = Msg_Exec_LogOffUser_cmd
exec.PsExec()
exec.Status = Msg_Exec_State_Over
case Msg_Exec_RebootWindows:
exec.Command = Msg_Exec_RebootWindows_cmd
exec.PsExec()
exec.Status = Msg_Exec_State_Over
case Msg_Exec_HideShowIcon:
var hidetype string
if exec.DataBool {
exec.Explain = "显示"
hidetype = "+"
}else{
exec.Explain = "隐藏"
hidetype = "-"
}
exec.Command = "attrib "+ hidetype+`h `+ exec.DataStr
exec.PsExec()
exec.IfMsg = true
exec.Explain = "图标已"+exec.Explain
exec.Status = Msg_Exec_State_Over
switch exec.Status{
case Msg_Exec_State_Request:
// maybe 当然时我来控制咯
// 修改 请求状态,client daemon才可以执行
switch exec.Instruction{
case Msg_Exec_CopyWeDrive:
if CopyStatusWeDrive[exec.Dept]{
exec.Status = Msg_Exec_State_Ack
CopyStatusWeDrive[exec.Dept] = false
} else {
return nil
}
}
exec.Status = Msg_Exec_State_Ack
return exec
case Msg_Exec_State_Ack:
// 进行延迟
//if exec.IfDelay {Delay(&exec.Delay)}
// 区分执行者
switch exec.Cmder{
case Msg_Exec_Cmder_ADServer:
switch exec.Instruction{
// 软件安装
case Msg_Exec_InstallSoftware:
// 对于 msi 格式
// 从\\adserver安装
......@@ -229,27 +203,17 @@ func (exec *MJexec)Msg_Deal()interface{}{
PsExec_sdic(exec.Computername,Dir_ADsoftware_local + exec.Command,exec.SessionID)
}
}
}
default:
Execcmd_nowait(exec.Command)
}
switch exec.Instruction{
case Msg_Exec_GUIExec:
PsExec_sdi(exec.Computername,exec.Command,exec.SessionID)
exec.Status= Msg_Exec_State_Over
case Msg_Exec_CopyWeDrive:
reg_Value_WeDriveDir := Reg_query_key_one(HKCU,Reg_Path_home,Reg_Name_WeDriveDir)
cmd := `cmd /c xcopy ` + SMB_ADMainDeptShare + " /D " + reg_Value_WeDriveDir + `\` + Dir_dept_share + " /S /T /E /C /y"
Execcmd_wait(cmd)
SendServerReport(Msg_Report_OverCopyToWeDrive)
}
default:
Execcmd_nowait(exec.Command)
}
return nil
return exec
}
// 关于 backup 备份 的 消息处理
func (bak * MJbackup)Msg_Deal() interface{}{
......@@ -327,25 +291,6 @@ func (bak * MJbackup)Msg_Deal() interface{}{
}
// 关于 registry 注册表 的 消息处理
func (reg * MJreg)Msg_Deal() interface{}{
switch reg.Action{
case Msg_Reg_Query:
reg.DataStr = Reg_query_key_one(reg.Root,reg.Path,reg.Key)
}
return reg
}
// 关于 error 错误 的 消息处理
func (err * MJerror)Msg_Deal() interface{}{
//SendWX(err.Instruction)
return nil
}
// 关于 wxwork 企业微信 的 消息处理
......@@ -384,7 +329,7 @@ func (wxwork * MJwxwork)Msg_Deal() interface{}{
// 只有域用户有效
// 写入被唤醒的ID用于判断是否是被企业微信唤醒
if !zhiweiuser{
if zhiweiuser{
Reg_Write_ADDC(pc,Reg_Name_BeWakedID,wxwork.UserID)
go func(userid string){
for i:=0;i<10;i++{
......@@ -392,6 +337,7 @@ func (wxwork * MJwxwork)Msg_Deal() interface{}{
status,_ := PSTest_Connection(pc)
if status {
SendWxworkTextToAUser(userid,"主机已启动!")
return
}
}
}(wxwork.UserID)
......@@ -408,3 +354,12 @@ func (wxwork * MJwxwork)Msg_Deal() interface{}{
return wxwork
}
// 关于 error 错误 的 消息处理
func (err * MJerror)Msg_Deal() interface{}{
//SendWX(err.Instruction)
return nil
}
......@@ -13,7 +13,6 @@ const msgerror string = "error"
const Msg_Report string = "report"
const Msg_Exec string = "exec"
const Msg_Backup string = "backup"
const Msg_Reg string = "reg"
const Msg_Error string = "error"
const Msg_Wxwork string = "wxwork"
......@@ -68,22 +67,26 @@ const (
)
const Msg_Exec_State_Request string = "request"
const Msg_Exec_State_Ack string = "ack"
const Msg_Exec_State_Over string = "over"
const Msg_Exec_TurnOffPC string = TurnOffPC
const Msg_Exec_TurnOffPC_cmd string = "shutdown -s -t 300"
const Msg_Exec_CancelTurnOffPC string = "cancel" + TurnOnPC
const Msg_Exec_CancelTurnOffPC_cmd string = "shutdown -a"
const Msg_Exec_LogOffUser string = LogOutUser
const Msg_Exec_LogOffUser_cmd string = "shutdown -l"
const Msg_Exec_UserExec string = "userexec"
const Msg_Exec_RebootWindows string = "rebootWindows"
const Msg_Exec_RebootWindows_cmd string = "shutdown -r -t 15"
const Msg_Exec_InstallSoftware string = "installsoftware"
const Msg_Exec_CopyWeDrive string = "copyWeDrive"
const Msg_Exec_CopyDeptShare string = "copydeptshare"
const Msg_Exec_GUIExec string = "guiexec"
const Msg_Exec_HideShowIcon string = "HideShowIcon"
// msg wxwork type ////////////////////////////////////////////////////////////////
const Msg_Wxwork_UserWake string = "UserWake"
//
// Registry Root
const (
Msg_Reg_Query = iota
Msg_Reg_Read
......@@ -116,9 +119,9 @@ type MJreport struct {
type MJexec struct {
MJbase
Command string `json:"command"`
Cmder int `josn:"cmder"`
SessionID string `json:"sessionid"`
IfDelay bool `josn:"ifDelay"`
IfMsg bool `josn:"ifMsg"`
Delay string `json:"delay"`
}
// backup Json Format /////////////////////////////////////////////////////
......@@ -126,16 +129,6 @@ type MJbackup struct{
MJbase
Version string `json:"version"`
}
// registry Json Format /////////////////////////////////////////////////////
type MJreg struct{
MJbase
Action int `json:"action"`
Root int `json:"root"`
Path string `json:"path"`
Key string `json:"key"`
DataType int `json:"datatype"`
}
// error Json Format /////////////////////////////////////////////////////
type MJerror struct{
MJbase
......@@ -158,7 +151,6 @@ type MJwxwork struct {
//
// Report
func GJreport(s string) interface{}{
......@@ -203,46 +195,26 @@ func (rep * MJreport)init(Report string) {
func GJexec(s string) MJexec{
var exec MJexec
exec.init(s)
return exec
}
func GJexecAck(s string) interface{}{
var exec MJexec
exec.init(s)
exec.Status = Msg_Exec_State_Ack
return exec
}
func GJexecCopyWeDrive(s string) MJexec{
var exec MJexec
exec.init(s)
exec.DataStr = User_dept
exec.Init(s)
return exec
}
func GJexecInstallSoftware(b bool,s string) interface{}{
var exec MJexec
exec.init(s)
exec.Status = Msg_Exec_State_Ack
exec.Init(s)
exec.DataBool = b
exec.Cmder = Msg_Exec_Cmder_ADServer
exec.Instruction = Msg_Exec_InstallSoftware
exec.Command = s
return exec
}
func GJexecUserCmd(s string) interface{}{
var exec MJexec
exec.init("")
exec.Init("")
exec.Command = s
exec.Status = Msg_Exec_State_Ack
return exec
}
func GJexecGUI(s string) interface{}{
var exec MJexec
exec.init(Msg_Exec_GUIExec)
exec.Command = s
exec.Status = Msg_Exec_State_Ack
return exec
}
func (exec * MJexec)init(s string){
func (exec * MJexec)Init(s string){
exec.Dept = User_dept
exec.Username = User_name
exec.Computername = User_computername
......@@ -250,12 +222,16 @@ func (exec * MJexec)init(s string){
exec.MsgType = Msg_Exec
exec.Instruction = s
exec.SessionID = User_sessionID
exec.Cmder = Msg_Exec_Cmder_LocalDaemon
exec.Status = Msg_Exec_State_Request
exec.IfMsg = false
}
func (exec * MJexec)PsExec(){
PsExec_sd(exec.Computername,exec.Command)
}
// Backup
func GJbackup()interface{}{
......@@ -309,7 +285,7 @@ func (wxwork * MJwxwork)Reg_Query_ADUsers(key string) string{
Reg_Path_home_du + wxwork.Name,
key)
}
func (wxwork * MJwxwork) Reg_Query_ZhiWeiUsers(key string) string{
func (wxwork * MJwxwork)Reg_Query_ZhiWeiUsers(key string) string{
return Reg_query_key_one(
Reg_Root_ac,
Reg_Path_home_zhu + wxwork.Name,
......
......@@ -83,23 +83,23 @@ func PntSend(v ...interface{}){
}
func PrintPrefix(s string ,v ...interface{}){
Loger.SetPrefix(s)
PrintLog(v ...)
log.Println(v ...)
Loger.Println(v ...)
}
func PntWxwork(v ...interface{}){
Loger.SetPrefix("WXWORK")
PrintLog(v ...)
Loger.SetPrefix("WXWORK" )
log.Println(v ...)
Loger.Println(v ...)
}
func PntWxworkf(f string,v ...interface{}){
Loger.SetPrefix("WXWORK")
log.Printf(f,v ...)
Loger.SetPrefix("WXWORK ")
log.Println(v ...)
Loger.Printf(f,v ...)
}
func PntWxSendMsgText(v ...interface{}){
Loger.SetPrefix("WxSendMsgText")
PrintLog(v ...)
Loger.SetPrefix("WxSendMsgText ")
log.Println(v ...)
Loger.Println(v ...)
}
......@@ -21,9 +21,7 @@ func SendServerDCInfo(s string)([]byte,error){
func SendServerExec(s string)([]byte,error){
return SendServer(GJexec(s))
}
func SendServerGUIExec(s string){
SendServer(GJexecGUI(s))
}
func SendServerError(err error)([]byte,error){
return SendServer(GJerror(err))
}
......
......@@ -133,6 +133,37 @@ func Execcmd_nowait_noargs(app string){
//
// PowerShell
//
func PSCommandOutput(cmd string) (string,error) {
if cmd == "" {
return "",Error_Lost_Parameter
}
cmd = "powershell -command "+cmd
app,appargs,err := execcmd_base(cmd)
if err !=nil{
return "",err
}
r,err := exec.Command(app,appargs...).Output()
if err !=nil {
return "",err
}
out,err := simplifiedchinese.GBK.NewDecoder().Bytes(r)
if err !=nil {
return "",err
}
return string(out),nil
}
func PSCommandOutputNoSplit(cmd string) (string,error) {
if cmd == "" {
return "",Error_Lost_Parameter
}
r,err := exec.Command("powershell","-command",cmd).Output()
if err !=nil {
return "",err
}
return string(r),nil
}
func PSTest_Connection(host string) (bool,error) {
if host == "" {
return false,Error_Lost_Parameter
......
......@@ -2,7 +2,7 @@ package main
import (
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
"fmt"
"strings"
pub "AD-Control/public"
)
......@@ -139,123 +139,6 @@ func siEnter_admin(softname string){
//---------------------------------------------------------------
//
// WxDrive Sync
//
//---------------------------------------------------------------
// 微盘同步
func menuInitWxDriveSync(ni * walk.NotifyIcon){
fa := "微盘同步"
sub := [...]string{"初始化","同步部门共享盘到微盘(自动)","同步微盘部门共享文件到本地服务器(手动)","说明"}
// 建立空菜单
nm,err := walk.NewMenu()
if err != nil {
pub.PntError(err)
}
for i,buttonText := range sub{
// 建立 子按钮
na := walk.NewAction()
if err := na.SetText(buttonText); err != nil {
pub.PntError(err)
}
// 为子按钮 添加事件
switch i{
case 0:
na.Triggered().Attach(wxdsInit)
case 1:
na.Triggered().Attach(wxdsToDrive)
case 2:
na.Triggered().Attach(wxdsToServer)
case 3:
na.Triggered().Attach(wxdsExplain)
}
// 将 子按钮 添加到 菜单
nm.Actions().Add(na)
}
//将菜单添加到托盘
sysmenu,err := ni.ContextMenu().Actions().AddMenu(nm)
if err != nil {
pub.PntError(err)
}
// 主菜单 属性
sysmenu.SetText(fa)
sysmenu.SetVisible(true)
sysmenu.SetEnabled(true)
}
// 微盘同步 初始化
func wxdsInit(){
explain := "选择个人ID(一般是168开头),请根据微盘的文件夹所在位置进行选择,确定并选择并点击文件夹(一串数字)后,点击确定继续进行下一步!具体操作方法点击说明!"
var FullWeDrive string
for _,i := range pub.Dir_WeDrive{
if pub.Exist(i + `\Global`){
FullWeDrive = pub.ChooseFolder(&explain,&i)+`\WeDrive\知微数据`
continue
}
}
pub.PntInfo(FullWeDrive)
if pub.NotExist(FullWeDrive){
pub.Msg("不存在知微数据文件夹,请重新选择")
return
}
pub.Reg_Write_DC(
pub.Reg_Name_WeDriveDir,
FullWeDrive)
pub.Msg("初始化完毕,请在微盘中创建文件夹(办公室部门内部共享),并分享给同事,创建后,点击开始同步即可。")
}
// 微盘同步 同步到微盘
func wxdsToDrive(){
if pub.Msg_YesNo("确定手动进行一次 -> 从共享盘同步到微盘吗?如果调整过共享盘的文件结构,请先在微盘中同步调整,否则微盘将会混沌。")==1{
pub.SendServer(pub.GJexecCopyWeDrive(pub.Msg_Exec_CopyWeDrive))
pub.Msg("同步完成!")
}
}
// 微盘同步 同步到服务器
func wxdsToServer(){
reg_Value_WeDriveDir := pub.Reg_Query_DC(pub.Reg_Name_WeDriveDir)
weDrive_Share_Dir := reg_Value_WeDriveDir +`\` + pub.Dir_dept_share
if reg_Value_WeDriveDir != "" && pub.Exist(weDrive_Share_Dir){
if pub.Msg_YesNo("确定手动进行一次 -> 从微盘到共享盘吗?如果俩者文件结构不一致,文件盘将会混沌。")==1{
cmd := `cmd /c xcopy ` + weDrive_Share_Dir + pub.SMB_ADMainDeptShare + "/D /S /E /C /y"
pub.Execcmd_wait(cmd)
pub.SendServerReport(pub.Msg_Report_OverCopyToDeptShare)
pub.Msg("同步完成!")
}
}else{
pub.Msg("未进行初始化或当前微盘路径错误,请重新初始化。微盘路径信息:"+reg_Value_WeDriveDir)
}
}
// 微盘同步 说明
func wxdsExplain(){
msg :=`
1.此功能,部门内部的路人甲初始化一次即可,并分享微盘文件夹给炮灰乙、流氓丙即可。
2.当路人甲没有启动这个小工具时,土匪丁想要同步的话,也时需要初始化。
5.初始化后,凡是启动了小工具,2小时自动同步一次到微盘。但从微盘同步到部门共享盘中只能是手动的。
7.但限于微盘的特性,当文件共享盘的文件名发生变化,微盘是依旧保留旧文件夹的。所以微盘的文件时需要定期手动清理的。
9.关于初始化中路径选择问题:打开微盘,右键打开已下载的文件。根据该文件所在的路径来确定初始化中的路径。
8.以上,此致,敬礼,望赞!
`
pub.Msg(msg)
}
//---------------------------------------------------------------
//
// Kinds of Tools
//
//---------------------------------------------------------------
......@@ -264,7 +147,7 @@ func wxdsExplain(){
func menuInitTools(ni * walk.NotifyIcon){
fa := "工具集合"
sub := [...]string{"Excel关键词分割","备份用户文件","优雅批量打开网页","隐藏桌面图标","显示桌面图标","更新手机代理程序","移动硬盘(胡一波)","键盘驱动(徐文强)","测试"}
sub := [...]string{"Excel关键词分割","备份用户文件","优雅批量打开网页","隐藏/显示桌面图标","更新手机代理程序","移动硬盘(胡一波)"}
// 建立空菜单
nm,err := walk.NewMenu()
if err != nil {
......@@ -275,13 +158,8 @@ func menuInitTools(ni * walk.NotifyIcon){
// 过滤按钮
switch i{
case lastone-2:
if ! pub.TheUser(pub.AD_User_huyibo) {continue}
case lastone-1:
if ! pub.TheUser(pub.AD_User_xuwenqiang) {continue}
case lastone:
if ! pub.AdminUser(&pub.User_name) {continue}
if ! pub.TheUser(pub.AD_User_huyibo) {continue}
}
// 建立 子按钮
......@@ -299,17 +177,11 @@ func menuInitTools(ni * walk.NotifyIcon){
case 2:
na.Triggered().Attach(tBatchOpenWeb)
case 3:
na.Triggered().Attach(tHideIcon)
na.Triggered().Attach(tHideShowIcon)
case 4:
na.Triggered().Attach(tShowIcon)
case 5:
na.Triggered().Attach(tUpdateATool)
case lastone-2:
na.Triggered().Attach(t_movedisk_huyibo)
case lastone-1:
na.Triggered().Attach(t_keyboard_xuwenqiang)
case lastone:
na.Triggered().Attach(tTest)
case 5:
na.Triggered().Attach(tmovedisk_huyibo)
}
......@@ -339,7 +211,7 @@ func tBatchOpenWeb(){
MainWindow{
Title: "优雅批量打开网页",
Size: Size{600, 200},
Size: Size{600, 300},
Layout: VBox{},
Children: []Widget{
HSplitter{
......@@ -357,7 +229,7 @@ func tBatchOpenWeb(){
}
pub.Execcmd_nowait(`C:\Progra~2\Google\Chrome\Application\chrome.exe `+web)
pub.Delay(2)
outTE.AppendText(fmt.Sprintf("%d %s\n",seq+1,web))
outTE.AppendText(pub.Sprintf("%d %s\n",seq+1,web))
}
},
......@@ -378,7 +250,6 @@ func tBakcupUser(){
pub.SendServerReport(pub.Msg_Report_StartBak)
}
}
// 其他工具 更新手机代理程序
func tUpdateATool(){
pub.Execcmd_wait(`xcopy \\adserver\software\phoneproxy\ATools\win-unpacked C:\Application\win-unpacked /D /S /E /C /y`)
......@@ -386,25 +257,37 @@ func tUpdateATool(){
}
// 其他工具 移动硬盘(胡一波专用)
func t_movedisk_huyibo(){
func tmovedisk_huyibo(){
//pub.SendDaemonExec(`F:\SamsungPortableSSD.exe`)
}
func t_keyboard_xuwenqiang(){
pub.SendServerGUIExec(`start C:\Users\Public\Desktop\Durgod_Zeus_Engine.lnk`)
}
// 其他工具 隐藏图标
func tHideIcon(){
pub.Msg("emmmmmmm,大概下周吧,这周无望哈")
}
// 其他工具 显示图标
func tShowIcon(){
pub.Msg("仅供参考!!")
}
// 其他工具 测试
func tTest(){
//pub.SendDaemonExec(`D:\WXWork.exe`)
}
// 其他工具 隐藏/显示桌面图标
func tHideShowIcon(){
pub.Msg("注:并非所有图标都会列出,没有列出的图标请手动隐藏(右键文件,打开属性,勾选隐藏,点击确定)")
mw := &MyMainWindow{model: NewEnvModel()}
if _, err := (MainWindow{
AssignTo: &mw.MainWindow,
Title: "隐藏/显示桌面图标",
MinSize: Size{300, 400},
Size: Size{300, 400},
Layout: VBox{},
Children: []Widget{
ListBox{
AssignTo: &mw.lb,
Model: mw.model,
OnItemActivated: mw.tHideShowIconDeal,
},
PushButton{
Text: "隐藏/显示",
OnClicked: mw.tHideShowIconDeal,
},
},
}.Run()); err != nil {
pub.Msg("执行错误")
pub.PntError(err)
}
}
//---------------------------------------------------------------
//
......@@ -503,6 +386,7 @@ func menuInitFileShares(ni * walk.NotifyIcon){
//
//---------------------------------------------------------------
// 我的共享:本部门的共享
func menuInitMyShares(ni * walk.NotifyIcon){
fa := "我的共享"
......@@ -546,3 +430,73 @@ func menuInitMyShares(ni * walk.NotifyIcon){
sysmenu.SetEnabled(true)
}
//---------------------------------------------------------------
//
// Windows Menu Deal
//
//---------------------------------------------------------------
type MyMainWindow struct {
*walk.MainWindow
model *EnvModel
lb *walk.ListBox
}
func (mw *MyMainWindow) tHideShowIconDeal() {
app := (&mw.model.items[mw.lb.CurrentIndex()]).name
fullAppDir := `C:\Users\public\desktop\`+app+`.lnk`
var exec pub.MJexec
exec.Init(pub.Msg_Exec_HideShowIcon)
exec.DataStr = fullAppDir
r,err :=pub.PSCommandOutputNoSplit(`(Get-Item `+fullAppDir+` -Force ).Attributes`)
if err !=nil{
pub.Msg("执行失败")
return
}
if strings.Index(r,"Hidden") == -1{
exec.DataBool = true
} else {
exec.DataBool = false
}
pub.SendServer(exec)
}
type EnvItem struct {
name string
}
type EnvModel struct {
walk.ListModelBase
items []EnvItem
}
func NewEnvModel() *EnvModel {
r,err :=pub.PSCommandOutput(`Get-ChildItem -Force -Filter *.lnk C:\Users\Public\Desktop -Name`)
if err !=nil{
pub.Msg("执行失败")
return nil
}
list := strings.Split(r,"\n")
m := &EnvModel{items: make([]EnvItem, len(list)-1)}
for i:=0;i<len(list)-1;i++{
unlnk :=list[i][:len(list[i])-5]
m.items[i] = EnvItem{unlnk}
}
return m
}
func (m *EnvModel) ItemCount() int {
return len(m.items)
}
func (m *EnvModel) Value(index int) interface{} {
return m.items[index].name
}
\ No newline at end of file
......@@ -10,7 +10,7 @@ func userInit() string{
pub.Reg_Exist_item(pub.HKCU,pub.Reg_Path_home)
// 初始化 图标文件
// 获取 图标文件 路径
var icoDir =[]string {
`AD-Control.ico`,
`C:\windows\system32\AD-Control.ico`,
......@@ -27,7 +27,6 @@ func userInit() string{
func menuInit(ni * walk.NotifyIcon){
menuInitPower(ni)
menuInitSoftwareInstall(ni)
menuInitWxDriveSync(ni)
menuInitTools(ni)
menuInitFileShares(ni)
menuInitMyShares(ni)
......@@ -35,21 +34,22 @@ func menuInit(ni * walk.NotifyIcon){
}
func main() {
// 用户初始化
// 用户 初始化
icodir := userInit()
// 程序初始化
// 程序 初始化
mw,err := walk.NewMainWindow()
if err != nil {
pub.PntError(err)
}
// 图标资源 初始化
icon, err := walk.Resources.Icon(icodir)
if err != nil {
pub.PntError(err)
}
// 后台图标应用初始化
// 后台图标应用 初始化
ni, err := walk.NewNotifyIcon(mw)
if err != nil {
pub.PntError(err)
......@@ -65,12 +65,6 @@ func main() {
}
menuInit(ni)
// 为了防止ADServer的Daemon.exem没有运行而导致
// 域计算机运行users.exe失败,
// 需要取消由users.exe向ADServer报告
// 交给组策略中adct.exe进行报告
// pub.SendServerReport(pub.Msg_Report_UserStart)
// The notify icon is hidden initially, so we have to make it visible.
if err := ni.SetVisible(true); err != nil {
pub.PntError(err)
......
......@@ -125,9 +125,11 @@ func wxMsgDeal(name, userid,text * string ) string{
pub.SendWxworkTextToAUser(*userid,"收到,正在处理~")
result,err = pub.SendServer(pub.GJwxworkText(name,userid,text,pub.Msg_Wxwork_UserWake))
case "":
return ""
//
default:
pub.SendWxworkTextToAUser(*userid,"emmmmmmmmm")
pub.SendWxworkTextToAUser(*userid,*text)
return ""
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment