指定時間後にシャットダウン/スリープ/指定ファイル実行するAHKスクリプト

指定時間後にシャットダウン/スリープ/指定ファイル実行するAHKスクリプト

以前作ったスクリプトの改変。

と言っても、InputBoxからGuiに変えちゃってるので完全に別物と言えば別物。

Win+Escを押すとダイアログが出てくるので、時間を分単位で指定し、チェックボックスで「シャットダウン」「スリープ」「指定ファイル」のどれかを選びOKを押すと、指定時間後にそれが実行される。

ファイル指定ができる以外は前回のスクリプトと同じ。ファイル指定ダイアログでは実在しないファイルも選べるようになっており、その場合ファイルを実行する代わりにメッセージボックスが出るので、適当なリマインダー代わりにも使えるかもしれない。

ただ、この程度の機能をGuiを使ってまで実現するのは馬鹿らしいので、InputBoxで入力ルールを工夫した方が便利かもしれない。

#Esc::
	STGui := NewGui()
	Gui, %STGui%:Add, Edit, vSTCnt w30 Number, 
	Gui, %STGui%:Add, Text, ys+4, 分後に実行
	Gui, %STGui%:Add, Radio, Checked1 vSTSel xm, シャットダウン
	Gui, %STGui%:Add, Radio, Checked0, スリープ
	Gui, %STGui%:Add, Radio, Checked0 gFileSelect Section, ファイル
	Gui, %STGui%:Add, Edit, vSTFile ys-3, 
	Gui, %STGui%:Add, Button, xm w100 Section gSTExec Default, OK
	Gui, %STGui%:Add, Button, w100 ys gCancel, Cancel
	Gui, %STGui%:Show
Return
FileSelect:
	FileSelectFile, TmrFile
	GuiControl, , STFile, %TmrFile%
Return
STExec:
	Gui, %STGui%:Submit
	STCnt := STCnt * 1000 * 60
	If (STCnt > 0)
	{
		Tick = % A_TickCount + STCnt
		If STSel = 1
			SetTimer, Shutdown, 1000
		Else If STSel = 2
			SetTimer, Sleep, 1000
		Else If STSel = 3
			SetTimer, STRun, 1000
	}
	Gui, Destroy
Return
Shutdown:
	If (A_TickCount > Tick)
	{
		SetTimer, Shutdown, OFF
		MsgBox, 4097, Shutdown, シャットダウンを開始します, 10
		IfMsgBox, Cancel
			Return
		Shutdown, 1
	}
Return
Sleep:
	If (A_TickCount > Tick)
	{
		SetTimer, Sleep, OFF
		DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0)
	}
Return
STRun:
	If (A_TickCount > Tick)
	{
		SetTimer, STRun, OFF
		If (FileExist(STFile))
			Run, %STFile%
		Else
			Msgbox, [File Not Exist] `n %STFile%
	}
Return

;以下の関数は「流行らせるページ」から拝借
NewGui(){
    Process,Exist
    mypid:=ErrorLevel
    DetectHiddenWindows,On
    WinGet,h,list,ahk_pid %mypid% ahk_class AutoHotkeyGUI
    DetectHiddenWindows,Off
    Loop,99{
        found=0
        Gui,%A_Index%:+LastFound
        WinGet,hwnd,id
        Loop,%h%{
            if(h%A_Index%=hwnd){
                found=1
                break
            }
        }
        if(found=0){
            return A_Index
        }
    }
    return 0
}