指定時間でアラート/シャットダウンするAHKスクリプト

指定時間でアラート/シャットダウンするAHKスクリプト

以前作ったタイマーは無駄にごちゃごちゃしていたし、経過時間の指定だけで時刻指定ができなかったので、作り直した。

実行時期の指定は、分単位での経過時間と時刻。実行動作は、警告ダイアログによるアラート、シャットダウン、ハイバネート、スリープの4つ。入力に応じて実行時期の指定方法のチェックが移るようにした。

デフォルトの動作は面倒の少ないアラートだけど、他の動作がよければ"Checked"を適当に書き換えて使えばいい。

前のと違ってタイマーが動作中かどうかを表示する機能がないので、うっかりスクリプトの再起動とかしてたら、タイマーが止まったことに気付かなくなるけど、まぁその辺は諦める。

それと、このタイマーは1秒単位でしか判定してないから、最大1秒弱の誤差が生じる。

#Esc::
	Gui, Kt:New, +LabelKt, キッチンタイマー
	Gui, Kt:Add, Edit, vKtSpan gKtSpan w50 Number, 
	Gui, Kt:Add, DateTime, vKtTime gKtTime x+5 w150 1, yyyy/MM/dd HH:mm:ss
	Gui, Kt:Add, GroupBox, xs Section w205, 時間指定方法
	Gui, Kt:Add, Radio, vKtTypeA xs+10 ys+15 Checked, 指定分後に実行
	Gui, Kt:Add, Radio, vKtTypeB, 指定時刻に実行
	Gui, Kt:Add, GroupBox, xs Section w205, 動作
	Gui, Kt:Add, Radio, vKtAction Checked xs+10 ys+15 Section, アラート
	Gui, Kt:Add, Radio, , ハイバネート
	Gui, Kt:Add, Radio, ys, シャットダウン
	Gui, Kt:Add, Radio, , スリープ
	Gui, Kt:Add, Button, gKtOK xs-10 y+15 w100 Default, OK
	Gui, Kt:Add, Button, gKtCancel w100 x+5, Cancel
	Gui, Kt:Show
Return
KtSpan:
	GuiControl, Kt:, KtTypeA, 1
Return
KtTime:
	GuiControl, Kt:, KtTypeB, 1
Return
KtOK:
	Gui, Kt:Submit
	If (KtTypeA = 1 && KtSpan)
		SetTimer, KtExec, % KtSpan * 60 * -1000
	Else If (KtTypeB = 1 && KtTime)
	{
		EnvSub, KtTime, %A_Now%, Seconds
		If (KtTime < 10)
			Msgbox, 指定時刻が早すぎます。`n10秒以上先を指定してください。
		Else
			SetTimer, KtExec, % KtTime * -1000
	}
KtCancel:
KtClose:
KtEscape:
	Gui, KT:Destroy
Return
KtExec:
	If (KtAction = 1)
		MsgBox, 8240, アラート, 指定された時刻となりました。
	Else
	{
		MsgBox, 4097, Shutdown, タイマーを実行します, 10
		IfMsgBox, Cancel
			Return
		If (KtAction = 2)
			DllCall("PowrProf\SetSuspendState", "int", 1, "int", 0, "int", 0)
		Else If (KtAction = 3)
			Shutdown, 1
		Else If (KtAction = 4)
			DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0)
	}
Return