WindowsPCを指定した時刻になったら、シャットダウンする【C#】

目次

経緯

タイトル通りですが、時間になったら、シャットダウンしてくれたら、便利かなと思い作りました。

テキストボックスに入力された時間を読み取り、その時間に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をシャットダウンします。もし指定した時間が現在の時間よりも前であれば、次の日の指定時間にシャットダウンされると解釈されます。

何かの参考になれば、幸いです。

ここまで読んでいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次