科密A1考勤自动同步
先吐槽下科密A1考勤,软件其实是自带有自动同步的功能的,但是设置后软件在同步的时间点后竟然直接弹出错误框,寻求科密技术支持,人家直接回复A1考勤只能手动同步,不能自动同步。(人家自动同步的版本是需要另外收费的)
接下来是重点,既然寻求技术支持无果,那么就只能自己动手解决了,下面是用AutoIt写的自动同步脚本,放在服务器上,然后根据你的需要设置windows的任务计划即可按照你需要的时间进行自动同步了。
同步考勤记录的AutoIt代码:
#include <File.au3> Local Const $LogFile = @ScriptDir & "\" & @YEAR & @MON & ".log" Local Const $IniFile = @ScriptDir & "\app.ini" Local Const $CM_CLIENT = IniRead($IniFile, "General", "CM_CLIENT", "") _FileWriteLog($LogFile, "======考勤记录同步开始执行======" ) MainFunc() _FileWriteLog($LogFile, "======考勤记录同步执行结束======") Func MainFunc() ;获取窗口 Local $hWndMain = WinGetHandle("[CLASS:CM_CLIENT; TITLE:终端管理]","") If @error Then $hWndMain = 0 if $CM_CLIENT <> "" Then Run($CM_CLIENT) $hWndMain = WinWait("[CLASS:CM_CLIENT; TITLE:终端管理]", "", 15) EndIf EndIf If ($hWndMain == 0) Then _FileWriteLog($LogFile, "获取 CM_CLIENT 窗口失败!" ) Return EndIf WinActivate($hWndMain) WinWaitActive($hWndMain) ; 切换到 同步 页面 Local $hWnd = ControlGetHandle($hWndMain, "[CLASS:TRzBmpButton]","数据采集") If @error Then _FileWriteLog($LogFile, "获取 数据采集 按钮失败!" ) return EndIf ControlClick($hWndMain,"",$hWnd ) Sleep(1000) ; 同步 Local $hWnd = ControlGetHandle($hWndMain, "[CLASS:TBitBtn]","采集(&O)") If @error Then _FileWriteLog($LogFile, "获取 采集 按钮失败!" ) return EndIf ControlClick($hWndMain,"",$hWnd ) ; 关闭弹出对话框 Local $hWndDiag = WinWait("[CLASS:#32770; TITLE:终端管理]", "", 900) If ($hWndDiag <> 0) Then WinActivate($hWndDiag) WinWaitActive($hWndDiag) Local $text = ControlGetText($hWndDiag, "", "Static2") _FileWriteLog($LogFile, $text & " " ) WinClose($hWndDiag) WinWaitClose($hWndDiag) EndIf ; 关闭主窗口 WinClose($hWndMain) EndFunc
同步时间的AutoIt代码:
#include <File.au3> Local Const $LogFile = @ScriptDir & "\" & @YEAR & @MON & ".log" Local Const $IniFile = @ScriptDir & "\app.ini" Local Const $CM_CLIENT = IniRead($IniFile, "General", "CM_CLIENT", "") _FileWriteLog($LogFile, "======时间同步开始执行======" ) MainFunc() _FileWriteLog($LogFile, "======时间同步执行结束======") Func MainFunc() ;获取窗口 Local $hWndMain = WinGetHandle("[CLASS:CM_CLIENT; TITLE:终端管理]","") If @error Then $hWndMain = 0 if $CM_CLIENT <> "" Then Run($CM_CLIENT) $hWndMain = WinWait("[CLASS:CM_CLIENT; TITLE:终端管理]", "", 15) EndIf EndIf If ($hWndMain == 0) Then _FileWriteLog($LogFile, "获取 CM_CLIENT 窗口失败!" ) Return EndIf WinActivate($hWndMain) ; 切换到 设备设置 页面 Local $hWnd = ControlGetHandle($hWndMain, "[CLASS:TRzBmpButton]","设备设置") If @error Then _FileWriteLog($LogFile, "获取 设备设置 按钮失败!" ) return EndIf ControlClick($hWndMain,"",$hWnd ) Sleep(1000) ;打开设备属性设置窗口 Local $hWnd = ControlGetHandle($hWndMain, "[CLASS:TButton]","属性设置(&A)") If @error Then _FileWriteLog($LogFile, "获取 属性设置 按钮失败!" ) return EndIf ControlClick($hWndMain,"",$hWnd ) ;激活设备属性设置窗口 Local $hWndSub = WinWait("[CLASS:TEquPropertySetFForm; TITLE:设备属性设置]", "", 5) WinActivate($hWndSub) ; 取消获取设置状态 $hWnd = ControlGetHandle($hWndSub, "[CLASS:TCheckBox]","获取设备状态") ControlClick($hWndSub,"",$hWnd ) ;单击确认按钮 $hWnd = ControlGetHandle($hWndSub, "[CLASS:TBitBtn]","确定(&O)") ControlClick($hWndSub,"",$hWnd ) Local $hWndDiag = WinWait("[CLASS:#32770; TITLE:终端管理]", "", 300) If ($hWndDiag <> 0) Then WinActivate($hWndDiag) WinWaitActive($hWndDiag) Local $text = ControlGetText($hWndSub, "", "TMemoExt1") $text = StringReplace($text ,@CRLF," | ") $text = StringReplace($text ,"| |","|") _FileWriteLog($LogFile, $text & " ") Local $text = ControlGetText($hWndDiag, "", "Static2") $text = StringReplace($text ,@CR," | ") _FileWriteLog($LogFile, $text & " ") WinClose($hWndDiag) WinWaitClose($hWndDiag) EndIf ; 关闭设备属性窗口 WinClose($hWndSub) WinWaitClose($hWndSub) ; 关闭主窗口 WinClose($hWndMain) EndFunc
原文链接地址:https://blog.exsvc.cn/article/autoit-comet-a1-sync.html
转载请注明:转载自 易科博客 ,谢谢!