似水年华 2007-11-9 08:01 PM
定时关机提醒系统(源码)
[code]
#include <GUIConstants.au3>
Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 1)
$g_szVersion = "定时关机提醒 for 小英"
If WinExists($g_szVersion) Then
MsgBox(0, "提示", "程序已经运行,请勿重复打开", 5)
Exit
EndIf
AutoItWinSetTitle($g_szVersion)
FileInstall("shutdown.exe", @TempDir & "\shutdown.exe", 1)
$show = TrayCreateItem("显示")
TrayItemSetState(-1, 128)
$exit = TrayCreateItem("退出")
TraySetToolTip("定时关机提醒系统 for 小英")
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("定时关机提醒 for 小英", 334, 200, 271, 281)
GUISetFont(11, 400, 0, "宋体")
GUISetBkColor(0x99CCFF)
$Label1 = GUICtrlCreateLabel("定时关机提醒 for 小英", 50, 16, 250, 24)
GUICtrlSetFont(-1, 15, 400, 0, "隶书")
GUICtrlSetColor(-1, 0xFF00FF)
$Label2 = GUICtrlCreateLabel("--by dxj", 220, 36, 80, 20)
$m1 = GUICtrlCreateRadio("", 35, 68)
$m2 = GUICtrlCreateRadio("", 35, 98)
$Label3 = GUICtrlCreateLabel("本次我想开机", 55, 68, 88, 18)
$Combo1 = GUICtrlCreateCombo("0", 147, 64, 40, 25)
GUICtrlSetData(-1, "1|2|3|4|5|6|7|8|9|10|11|12", "1")
$label12 = GUICtrlCreateLabel("小时", 188, 68)
$Input1 = GUICtrlCreateCombo("0", 225, 64, 37, 22)
GUICtrlSetData(-1, "1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59", "0")
$Label4 = GUICtrlCreateLabel("分钟", 265, 68, 32, 18)
$label11 = GUICtrlCreateLabel("设定关机时间", 55, 98)
$Combo3 = GUICtrlCreateCombo("0", 147, 94, 40, 25)
GUICtrlSetData(-1, "1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23", "0")
$label12 = GUICtrlCreateLabel("时", 195, 98)
$Combo4 = GUICtrlCreateCombo("0", 225, 94, 37, 25)
GUICtrlSetData(-1, "1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59", "0")
$label12 = GUICtrlCreateLabel("分", 270, 98)
$Checkbox1 = GUICtrlCreateCheckbox("", 48, 156, 17, 17)
$Checkbox2 = GUICtrlCreateCheckbox("", 184, 156, 17, 17)
$Label5 = GUICtrlCreateLabel("到时强制关机", 66, 160, 88, 18)
$Label6 = GUICtrlCreateLabel("开机自动启动", 200, 160, 88, 18)
$Label7 = GUICtrlCreateLabel("提前", 96, 130, 32, 18)
$Input2 = GUICtrlCreateInput("10", 136, 126, 33, 22)
$Label8 = GUICtrlCreateLabel("分钟提醒", 176, 130, 60, 18)
$delay_h = IniRead("定时关机.inf", "config", "hour", 1)
$delay_m = IniRead("定时关机.inf", "config", "min", 0)
$alarm = IniRead("定时关机.inf", "config", "alarm", 10) * 60000
$ms = IniRead("定时关机.inf", "config", "form", 1)
$h = IniRead("定时关机.inf", "config", "h", 0)
$m = IniRead("定时关机.inf", "config", "m", 0)
GUICtrlSetData($Combo1, $delay_h)
GUICtrlSetData($Input1, $delay_m)
GUICtrlSetData($Input2, $alarm / 60000)
GUICtrlSetData($Combo3, $h)
GUICtrlSetData($Combo4, $m)
$force = IniRead("定时关机.inf", "config", "force", 0)
If $force = 1 Then GUICtrlSetState($Checkbox1, $GUI_CHECKED)
If FileExists(@StartupDir & "\定时关机.lnk") Then GUICtrlSetState($Checkbox2, $GUI_CHECKED)
If $ms = 1 Then
GUICtrlSetState($m1, $GUI_CHECKED)
GUICtrlSetState($Combo3, $GUI_DISABLE)
GUICtrlSetState($Combo4, $GUI_DISABLE)
Else
GUICtrlSetState($m2, $GUI_CHECKED)
GUICtrlSetState($Combo1, $GUI_DISABLE)
GUICtrlSetState($Input1, $GUI_DISABLE)
EndIf
$begin = 0
$shuttime = 2424
$timeisup = 1
$alarmisup = 1
$last_h = 24
$last_m = 60
$min = 0
GUISetState(@SW_SHOW)
TraySetState()
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
$msg = TrayGetMsg()
If $msg = $exit Then
If MsgBox(4 + 48 + 262144, "提示", "定时关机系统正在计时,是否确定退出?") = 6 Then Exit
Else
If $msg = $show Then
GUISetState(@SW_SHOW)
GUISetState(@SW_RESTORE)
TrayItemSetState($show, 128)
EndIf
EndIf
If $timeisup = 0 Then
$last_h = Number($shuttime_h) - Number(@HOUR)
$last_m = Number($shuttime_m) - Number(@MIN)
If $last_m < 0 Then
$last_m = $last_m + 60
$last_h = $last_h - 1
EndIf
If $last_h < 0 Then $last_h = $last_h + 24
If @MIN <> $min Then
TraySetToolTip("本次关机时间设定为" & $shuttime_h & "点" & Number($shuttime_m) & "分," & "现在离关机还有" & $last_h & "小时" & $last_m & "分钟")
$min = @MIN
EndIf
If $last_h = 0 And $last_m = 1 Then
$timeisup = 1
Run(@TempDir & "\Shutdown.exe /shutdown")
If $force = 0 Then
If MsgBox(4+48+262144, "关机提示", "系统即将关闭,是否延长关机时间?", 60) = 6 Then
WinKill("定时关机系统 for 小英")
GUICtrlSetData($Label3, "延长关机时间")
TraySetToolTip("定时关机提醒系统 for 小英")
WinSetOnTop($g_szVersion,"",1)
GUISetState(@SW_SHOW)
GUISetState(@SW_RESTORE)
WinSetOnTop($g_szVersion,"",1)
Else
Exit
EndIf
Else
Exit
EndIf
EndIf
If $alarm > 1 And $last_h = 0 And $last_m = $alarm And $alarmisup = 0 Then
MsgBox(48+262144, "提示", "离关机时间还有" & $alarm & "分钟,请提前做好存档准备!", 10)
$alarmisup = 1
EndIf
EndIf
Switch $nMsg
Case $GUI_EVENT_CLOSE
IniWrite("定时关机.inf", "config", "hour", $delay_h)
IniWrite("定时关机.inf", "config", "min", GUICtrlRead($Input1))
IniWrite("定时关机.inf", "config", "alarm", GUICtrlRead($Input2))
IniWrite("定时关机.inf", "config", "h", GUICtrlRead($Combo3))
IniWrite("定时关机.inf", "config", "m", GUICtrlRead($Combo4))
If MsgBox(4 + 48 + 262144, "提示", "程序正在运行,是否确定退出?") = 6 Then Exit
Case $GUI_EVENT_MINIMIZE
TrayItemSetState($show, 64)
IniWrite("定时关机.inf", "config", "hour", $delay_h)
IniWrite("定时关机.inf", "config", "min", GUICtrlRead($Input1))
IniWrite("定时关机.inf", "config", "alarm", GUICtrlRead($Input2))
IniWrite("定时关机.inf", "config", "h", GUICtrlRead($Combo3))
IniWrite("定时关机.inf", "config", "m", GUICtrlRead($Combo4))
If GUICtrlRead($m1) = 1 Then
$delay_m = GUICtrlRead($Input1)
$force = IniRead("定时关机.inf", "config", "force", 0)
$delay_h = GUICtrlRead($Combo1)
$shuttime_h = Number(@HOUR) + Number($delay_h)
$shuttime_m = Number(@MIN) + Number($delay_m)
If $shuttime_m >= 60 Then
$shuttime_m = $shuttime_m - 60
$shuttime_h = $shuttime_h + 1
EndIf
If $shuttime_h < 24 Then
Else
$shuttime_h = $shuttime_h - 24
EndIf
Else
$shuttime_h = GUICtrlRead($Combo3)
$shuttime_m = GUICtrlRead($Combo4)
$delay_h = Number($shuttime_h) - Number(@HOUR)
$delay_m = Number($shuttime_m) - Number(@MIN)
If $delay_m < 0 Then
$delay_m = $delay_m + 60
$delay_h = $delay_h - 1
EndIf
If $delay_h < 0 Then
$delay_h = $delay_h + 24
EndIf
EndIf
$delay = $delay_h * 60 + $delay_m
$alarm = GUICtrlRead($Input2)
If $delay <= $alarm Then
MsgBox(0, "提示", "你输入的提醒时间大于或等于开机持续总时间!", 10)
GUISetState(@SW_RESTORE)
Else
GUISetState(@SW_HIDE)
TrayTip("提示", "定时关机系统现在开始计时,关机时间为" & $shuttime_h & "点" & $shuttime_m & "分", 1, 1)
Sleep(2000)
TrayTip("提示", "", 1, 1)
If $shuttime_m < 10 Then $shuttime_m = "0" & $shuttime_m
$shuttime = $shuttime_h & $shuttime_m
$timeisup = 0
$alarmisup = 0
$begin = 1
$min = 0
EndIf
Case $Label3
ControlClick("定时关机提醒 for 小英", "", $m1)
Case $label11
ControlClick("定时关机提醒 for 小英", "", $m2)
Case $Label5
ControlClick("定时关机提醒 for 小英", "", $Checkbox1)
Case $Label6
ControlClick("定时关机提醒 for 小英", "", $Checkbox2)
Case $Checkbox1
If GUICtrlRead($Checkbox1) = 1 Then
IniWrite("定时关机.inf", "config", "force", 1)
Else
IniWrite("定时关机.inf", "config", "force", 0)
EndIf
Case $Combo3
IniWrite("定时关机.inf", "config", "h", GUICtrlRead($Combo3))
Case $Combo4
IniWrite("定时关机.inf", "config", "m", GUICtrlRead($Combo4))
Case $Checkbox2
If GUICtrlRead($Checkbox2) = 1 Then
FileCreateShortcut(@ScriptDir & "\" & @ScriptName, @StartupDir & "\定时关机.lnk", @ScriptDir)
Else
FileDelete(@StartupDir & "\定时关机.lnk")
EndIf
Case $Combo1
$delay_h = 0
$delay_h = GUICtrlRead($Combo1)
IniWrite("定时关机.inf", "config", "hour", $delay_h)
Case $Input1
IniWrite("定时关机.inf", "config", "min", GUICtrlRead($Input1))
Case $Input2
IniWrite("定时关机.inf", "config", "alarm", GUICtrlRead($Input2))
Case $m1
GUICtrlSetState($Combo3, $GUI_DISABLE)
GUICtrlSetState($Combo4, $GUI_DISABLE)
GUICtrlSetState($Combo1, $GUI_ENABLE)
GUICtrlSetState($Input1, $GUI_ENABLE)
IniWrite("定时关机.inf", "config", "form", 1)
Case $m2
GUICtrlSetState($Combo1, $GUI_DISABLE)
GUICtrlSetState($Input1, $GUI_DISABLE)
GUICtrlSetState($Combo3, $GUI_ENABLE)
GUICtrlSetState($Combo4, $GUI_ENABLE)
IniWrite("定时关机.inf", "config", "form", 2)
EndSwitch
WEnd
[/code]