目次
経緯
タイトル通りですが、時間になったら、シャットダウンしてくれたら、便利かなと思い作りました。
テキストボックスに入力された時間を読み取り、その時間にPCをシャットダウンする
Formを作って、textBox_ShutdownTimeというテキストボックスを作りました。 また、button_Runというボタンも作りました。 テキストボックスの中にシャットダウンしたい時間を入れて、ボタンを押すとPCの電源が閉じる仕様です。
まず、System.Diagnostics 名前空間とSystem.Globalization 名前空間を追加する必要があります。次に、button_Run_Click イベントハンドラーにロジックを記入します。
以下はそのコードです:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Globalization;
namespace PCShutdown
{
public partial class Form1 : Form
{
private Timer shutdownTimer; // シャットダウンのタイマー
public Form1()
{
InitializeComponent();
shutdownTimer = new Timer();
shutdownTimer.Tick += ShutdownTimer_Tick;
}
private void button_Run_Click(object sender, EventArgs e)
{
DateTime currentTime = DateTime.Now;
DateTime shutdownTime;
if (DateTime.TryParseExact(textBox_ShutdownTime.Text, "HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out shutdownTime))
{
// 現在の日付にシャットダウン時間をセット
shutdownTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, shutdownTime.Hour, shutdownTime.Minute, 0);
// シャットダウン時間が現在の時間より過去であれば、次の日を意味すると解釈
if (shutdownTime <= currentTime)
{
shutdownTime = shutdownTime.AddDays(1);
}
// タイマーの設定
TimeSpan timeUntilShutdown = shutdownTime - currentTime;
shutdownTimer.Interval = (int)timeUntilShutdown.TotalMilliseconds; // ミリ秒単位で指定
shutdownTimer.Start();
}
else
{
MessageBox.Show("正しい時間の形式を入力してください (例: 18:00)", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ShutdownTimer_Tick(object sender, EventArgs e)
{
ShutdownComputer();
}
private void ShutdownComputer()
{
var psi = new ProcessStartInfo("shutdown", "/s /t 0")
{
CreateNoWindow = true,
UseShellExecute = false
};
Process.Start(psi);
}
}
}
こんな感じです。
このコードでは、textBox_ShutdownTime に HH:mm 形式(例: 18:00)で時間を入力すると、指定された時間にPCをシャットダウンします。もし指定した時間が現在の時間よりも前であれば、次の日の指定時間にシャットダウンされると解釈されます。
何かの参考になれば、幸いです。
ここまで読んでいただきありがとうございました。