#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_Icon=G:\au3\energysaving(1).ico
#PRE_Outfile=Green(x86).exe
#PRE_Outfile_x64=Green(x64).exe
#PRE_Compile_Both=y
#PRE_UseX64=y
#PRE_Res_Comment=计算机实验室定时关机程序
#PRE_Res_Description=计算机实验室定时关机程序
#PRE_Res_Fileversion=2.0.0.0
#PRE_Res_LegalCopyright=Copyright 2015 by Computer Lab
#PRE_Res_requestedExecutionLevel=None
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
;计算机实验室定时关机程序V2.0
;2015.4.28
;注意执行文件名为:Green.exe
;V2.0.0.0从FTP中读取TIME.INI配置文件至本地机,产生动作
;读取txt指定时间点
#include <Date.au3>
#include <Timers.au3>
#include <FTPEx.au3>
#include <Array.au3>
Opt("TrayMenuMode", 3) ; 默认菜单项目 (脚本暂停中/退出)(Script Paused/Exit) 将不会显示,并且所选项目不能被选中(checkbox不会打勾) . 请参考TrayMenuMode选项1和2(3=1+2).
;声明全局、局部变量
Global $Time[10];$T记录读取进来的时间段,共可容纳(0-9)10个,
Global $Timeticks[10][3];=[0,0,0,0,0,0,0,0,0,0];$Time换算成-5,0,+5分钟的时间码,如:[9:55,10:00,10:05]
Global $l;didi频率参数
Global $pwd ="1";默认退出密码
Global $Ver="(V2.0.0.0 中文版2015.05.28)";当前版本号
Global $IPAddress="192.168.180.8"
Global $FTP_Port=21;FTP端口号
Global $FTP_User="work"
Global $FTP_PW=""
HotKeySet("{F11}", "Endend");F11,程序退出热键
HotKeySet("{F10}", "TimeINI");F10,显示已获取的时间点
MsgBox(0,"人性化节约用电软件"&$Ver,"现在时刻:" & @HOUR &":"& @MIN & @CRLF & @CRLF &"计算机实验室欢迎大家前来学习,我们将与全校师生共创节约型校园!" & @CRLF & @CRLF & " >> Copyright 2015 by Computer Lab <<",10)
;~ FileDelete ( "TIME.INI" );删除本地已存在的旧INI文件【——测试版此语句不需工作】
;建议大循环由此开始,以便中途通过推送TIME.INI完成时间点重置
While 1
;【注意:测试版不需从服务器获取INI文件,注意同文件夹需有TIME.INI文件存在。实际运行版,下面5句生效,10分钟获取一次最新的INI配置】
;~ ;每当10分的时候(即00,10,20...50分钟时),获取一次INI文件
;~ Local $m=@MIN/10
;~ If $m=Int(@MIN/10) Then
;~ getini()
;~ EndIf
;读取INI设定时间至数组
Global $i=0,$j=0;循环变量,最多可以读取10行(10个时间点,0-9)
Global $k=-1;判断time.ini有多少行有效数据
;将ini内设时间点读入数组:$time[0-9]
For $i=0 To 9
$j="TIME_" & ($i+1)
$Time[$i]=IniRead("TIME.INI",$j,"Time","");读TIME.INI文件的指定关键字的值(time=值)
;对于有效数据,进行筛选、转换并放入数组
If $Time[$i]<>"" Then ;判断条件暂定为:非空值
$k=$k+1
;将TIME.INI文件中指定的有效时间,转换为时间戳,然后分别写入二维数组存放(带-5,0,+5分钟,[即参数修正为-3,0,+3]提醒,精确度±1分钟)
;本版本设计最多支持10个时间点.
Timeticks($k)
EndIf
Next
$i=0
; 获取当前系统时间,并转换为时间码
Local $NowTicks = Round(_TimeToTicks(@HOUR, @MIN, @SEC)/100000,0)
;将系统当前时间与制定时间点进行比较,并分别作出不同动作
For $i = 0 To $k
Switch $NowTicks
;距下课5分钟提醒
Case $NowTicks=$Timeticks[$i][0]
didi(3)
MsgBox(4096, "计算机实验室提示信息", "现在时刻:" & @HOUR & "点" & @MIN & "分" & @CRLF & @CRLF & "还有几分钟就要下课了,请尽快完成并提交作业" & @CRLF & @CRLF &"无需惊慌,人性化的程序不会关闭正在使用的电脑^_^",30)
Sleep(50000);延迟50秒
;下课提醒
Case $NowTicks=$Timeticks[$i][1]
didi(5)
MsgBox(4096, "计算机实验室提示信息", "现在时刻:" & @HOUR & "点" & @MIN & "分" & @CRLF & @CRLF & "即将下课,请清理好自己的随身物品,带走垃圾,谢谢合作!",30)
Sleep(50000);延迟50秒
;下课后5分钟关机提醒
Case $NowTicks=$Timeticks[$i][2]
didi(8)
If MsgBox(262145, "计算机实验室提示信息", "现在时刻:" & @HOUR & "点" & @MIN & "分" & @CRLF & @CRLF & "响应“创建节约型校园”号召,本电脑将于2分钟后自动关闭..." & @CRLF & "此时点击“取消”可继续使用...", 60) =2 Then
MsgBox(262144, "取消关机", "本次关机操作已成功取消!",15)
Else
If MsgBox(262145, "关机前确认", "真的要关机吗?若本机依然无人干预,将于60秒后自动关闭..."& @CRLF & @CRLF &"此时点击“取消”仍可继续使用...", 60) =2 Then
MsgBox(262144, "取消关机", "本次关机操作已成功取消!",15)
Else
MsgBox(262144, "已确定关闭该电脑", "电脑将于10秒后被关闭,谢谢使用!",10)
Shutdown(13)
EndIf
EndIf
Sleep(50000);延迟50秒
EndSwitch
Next
WEnd
;热键F11,输入密码退出
Func Endend()
Local $passwd = InputBox("程序退出", "请10秒内输入退出密码,测试版密码为:1", "", "*",400,120,default,default,10)
If $passwd=$pwd Then
;结束程序
MsgBox(4096, "程序退出", "定时关机程序" & $Ver & "将于3秒后结束...",3)
Exit
EndIf
EndFunc
Func getini()
; 尝试从FTP(work)获取time.ini复制至本地【测试版不会被调用运行】
Do
$FTP_Open = _FTP_Open("MY_FTP");创建一个FTP会话
$FTP_Connect =_FTP_Connect($FTP_Open,$IPAddress, $FTP_User, $FTP_PW,$FTP_Port)
Local $File_found=_FTP_FileGet($FTP_Connect, "TIME.INI", "TIME.INI");默认false,覆盖(刷新)时间点INI文件
_FTP_Close($FTP_Open)
Local $file = FileExists ("TIME.INI");检测文件存在否
Sleep(30000);延迟30秒再次尝试打开文件
Until $file =1;直到文件被读取到,否则在此循环
EndFunc
Func Timeticks($k)
$Timeticks[$k][0]=Round(_TimeToTicks(StringLeft($Time[$i],2),StringRight($Time[$i],2),0)/100000,0)-3;将读取的行数据,取左2、右2字节,并将其换算成为时间码[-5,0,+5分钟],下同
$Timeticks[$k][1]=Round(_TimeToTicks(StringLeft($Time[$i],2),StringRight($Time[$i],2),0)/100000,0)
$Timeticks[$k][2]=Round(_TimeToTicks(StringLeft($Time[$i],2),StringRight($Time[$i],2),0)/100000,0)+3
EndFunc
Func didi($l)
Beep(100*$l, 500)
Beep(0,10)
Beep(100*$l, 200)
Beep(0,10)
EndFunc
;热键F10,列表显示当前读取的时间点
Func TimeINI()
_ArrayDisplay($Time,"下课时间点如下:")
EndFunc