autohotkey v2写的一个简单的windows倒计时关机脚本
#SingleInstance force ; 确保脚本只有一个实例在运行
input:= InputBox("设置定时关机, 请输入关机倒计时时间(分钟):", "时间设置")
if input.result="Cancel"{
ExitApp
return
}
else
Minutes :=input.value
; 检查输入是否合法
If (!IsNumber(Minutes) || Minutes <= 0) {
Result := MsgBox("你要立刻关机吗?",, "YesNo")
if Result = "Yes"{
;MsgBox "You pressed Yes."
Shutdown 1 ; 1 表示关机,更多选项可以参考 AHK 文档
ExitApp ; 关闭GUI后停止脚本的执行
return
}
else{
;MsgBox "You pressed No."
ExitApp ; 关闭GUI后停止脚本的执行
return
}
}
; 弹出确认框
Result := MsgBox(Format("关机确认, 确定要在{1}分钟后关机吗?",Minutes),, "YesNo")
if Result = "No"{
ExitApp ; 关闭GUI后停止脚本的执行
return
}
; 开始倒计时
global time:=Minutes*60
global countdownGui := 0
global countdownText := ""
ShowCountdownGUI()
return
; 检查是否是数字
IsNumber(number) {
return RegExMatch(number, "^\d+$")
}
ShowCountdownGUI() {
global time
Mygui:=Gui()
MyGui.SetFont("s24","Font")
minu:=Floor(time/60)
sec:=time-minu*60
if minu<10
global CountdownText:=Mygui.Add("Text","x50 y30 w100 h30 ","0" . minu . ":0" . sec)
else
global CountdownText:=Mygui.Add("Text","x50 y30 w100 h30 ",minu . ":0" . sec)
MyGui.SetFont("s14","Font")
StopTimer:=Mygui.Add("Button","Default x50 y70 w100 h30","停止关机")
StopTimer.OnEvent("Click", ButtonStop); 当点击时, 调用 ButtonStop
MyGui.Title :="关机"
Mygui.show("w200 h150")
myGui.OnEvent("Close", ButtonStop)
setTimer CountDown, 1000
return
CountDown(){
global CountdownText
global time
time := time - 1
minu:=Floor(time/60)
sec:=time-minu*60
if minu<10
if sec<10
CountdownText.Text:="0" . minu . ":0" . sec
else
CountdownText.Text:="0" . minu . ":" . sec
else
if sec<10
CountdownText.Text:= minu . ":0" . sec
else
CountdownText.Text:= minu . ":" sec
if (time <= 0) {
shutdown 1
SetTimer , 0
ExitApp
Return
}
Return
}
ButtonStop(*){
;SetTimer , 0
;MsgBox "关机已停止!"
ExitApp
Return
}
}
这...我记得不是有shell吗 xiatongxue 发表于 2023-7-29 22:27
这...我记得不是有shell吗
终端命令的话好像是不会一直显示剩余时间的,我用的win11,别的版本不知道,
这个脚本只是加了个显示时间的窗口 不错,学习了。 Dengyunzhe 发表于 2023-7-30 17:33
终端命令的话好像是不会一直显示剩余时间的,我用的win11,别的版本不知道,
这个脚本只是加了个显示 ...
我写了一个可以倒计时的,3分钟以上倒数分钟,3分钟以下倒数秒:
@echo off
set /p shutdownDelay="请输入关机延迟时间(分钟):"
set /a shutdownDelaySeconds=%shutdownDelay% * 60
echo 系统将在%shutdownDelay% 分钟后自动关机...
echo 倒计时: %shutdownDelaySeconds% 秒...
:countdown
if %shutdownDelay% gtr 3 (
set /a shutdownDelay-=1
cls
echo 关机倒计时: %shutdownDelay% 分钟...(按Ctrl+c取消关机)
timeout /t 60 /nobreak >nul
goto countdown
)
:countdown2
if %shutdownDelaySeconds% gtr 0 (
set /a shutdownDelaySeconds-=1
cls
echo 关机倒计时: %shutdownDelaySeconds% 秒...(按Ctrl+c取消关机)
timeout /t 1 /nobreak >nul
goto countdown2
)
echo 倒计时结束,正在关机...
shutdown /s /t 0
页:
[1]