Dengyunzhe 发表于 2023-7-25 16:01

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
            
      }
    }




xiatongxue 发表于 2023-7-29 22:27

这...我记得不是有shell吗

Dengyunzhe 发表于 2023-7-30 17:33

xiatongxue 发表于 2023-7-29 22:27
这...我记得不是有shell吗

终端命令的话好像是不会一直显示剩余时间的,我用的win11,别的版本不知道,

这个脚本只是加了个显示时间的窗口

jjyywg 发表于 2023-10-13 21:31

不错,学习了。

gylgb 发表于 2024-5-25 11:38

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]
查看完整版本: autohotkey v2写的一个简单的windows倒计时关机脚本