今回はC#で『Windows OSを時間指定してシャットダウンする』というアプリケーションを作成します。
アプリの完成イメージは以下の動画の通りです。
時間、分、秒を設定して、シャットダウンまでの時間を任意に指定、キャンセルすることができます。
慣れない方には複雑に見えるかもしれませんが、ひとつひとつの要素はとても単純です。
第1回目となる今回は『ボタンを押すと1時間後にシャットダウン』までをプログラミングします。
簡単なプログラムを徐々にステップアップさせていきますので、その過程でプログラミングに必要な基礎知識を身につけることができます。
作業時間としては30分程度です。
説明中の見えにくい画像はクリックすることで拡大できます。
新しいプロジェクトを作成
まずは『Visual Studio』を起動し、新しいプロジェクトを作成します。
初めてWindowsフォームアプリを作成する方は、まずは以下のリンクの記事を参考に空のWindowsフォームアプリを作成してください。
今回のプロジェクト名、ソリューション名は『ShutDownApp』としました。
空のWindowsフォームアプリを作成した以下の画像の状態から解説を進めていきます。
フォームのレイアウト
まずはこのアプリが何を行うものなのかをわかりやすくするために、フォームにアプリの名前を表示します。
初期状態のフォームの上部には『Form1』と表示されていますが、これを『シャットダウンタイマー』に変更してみます。
画面右下の[プロパティ]内を下にスクロールしていくと[Text]という項目があるので、ここに『シャットダウンタイマー』と入力します。
『Form1』だった表示が『シャットダウンタイマー』に変更されたことを確認できます。
次に、適当な位置にボタンを2つ配置します。
ひとつは押すと一時間後にシャットダウンするボタン、もうひとつはシャットダウンをキャンセルするボタンです。
- ツールボックスをクリック
- [Button]をクリック
- 空のフォーム上にドラッグ&ドロップで配置
次に、配置したボタンに表示されている文字を変更します。
『Form1』の表示を変更した際と同様に、変更したいボタンを選択した状態で、画面右下の[プロパティ]の一覧の中にある項目[Text]に入力されている『button1』を任意の文字に変更します。
今回は、
上のボタンを『一時間後にシャットダウン』、
下のボタンを『シャットダウンをキャンセル』
と入力しました。
次にボタンの名前を変更します。
ボタンの表示を変更したときと同様に、それぞれのボタンの [プロパティ]の一覧の中にある項目[Name]に入力されている『button1』を任意の文字に変更します 。
今回は、
上のボタンを『button_Shutdown』、
下のボタンを『button_Cancel』
と入力しました。
ボタンの名前を変更する目的は、ボタンの役割を明確にするためです。
プログラムのコード画面だと、初期値の『button1』のままでは、どのボタンのプログラムを書いているのかがわからなくなるので、名前に役割を明記することで単純なミスを起こりにくくすることができます。
以上で最低限必要な部品はそろいました。
このままのレイアウトでもいいのですが、せっかくなので見栄えが良い位置にボタンをドラッグアンドドロップで移動し、フォームもボタンに合わせて小さくします。
プログラミング
それではプログラミングに入ります。
まずは一時間後にシャットダウンする機能を実装します。
ボタン『button_Shutdown』をダブルクリックし、プログラムコードを表示しましょう。
ボタン『button_Shutdown』 を押したときの動作は以下の{ }の中に記述します。
private void button_Shutdown_Click(object sender, EventArgs e)
{
//【ここにボタンをクリックした時の動作を記述します。】
}
今回は次のように入力してみましょう。
private void button_Shutdown_Click(object sender, EventArgs e)
{
System.Diagnostics.Process ShutDownProc
= new System.Diagnostics.Process();
ShutDownProc.StartInfo.FileName = "shutdown.exe";
ShutDownProc.StartInfo.Arguments = "/s /t 3600";
ShutDownProc.Start();
}
これで、一時間後にシャットダウンを行う機能は実装できました。
このプログラムの解説は後述します。
次はシャットダウンをキャンセルするボタンのプログラムを記述します。
再度フォーム編集画面を表示するため、画面右側の[ソリューションエクスプローラー]から[Form1.cs]をダブルクリックします。
フォームが表示されたら、ボタン『button_Cancel』をダブルクリックし、プログラムコードを表示しましょう。
ボタン『button_Cancel』 のプログラムは次のように入力します。
private void button_Cancel_Click(object sender, EventArgs e)
{
System.Diagnostics.Process ShutDownProc
= new System.Diagnostics.Process();
ShutDownProc.StartInfo.FileName = "shutdown.exe";
ShutDownProc.StartInfo.Arguments = "/a";
ShutDownProc.Start();
}
こちらもプログラムの解説については後述します。
ひとまずこれで完成なので、実行してみましょう。
画面上部の▶ボタン、または[F5]キーを押します。
入力ミス等がなければ、作成したフォームが表示されます。
ボタン[一時間後にシャットダウン]を押してみましょう。
次のような画面が表示されたら成功です。
60分後にWindowsをシャットダウンする旨が通知されます。
続いてボタン[シャットダウンをキャンセル]を押してみましょう。
次のような画面が表示されたら成功です。
シャットダウンをキャンセルする旨が通知されます。
以上で今回のプログラミングは終了です。おつかれさまでした。
解説
プログラムの解説をします。
その前に、今回はWindowsにあらかじめ備わっている『shutdown.exe』という実行ファイルを活用することでシャットダウン機能を実装しました。
この『shutdown.exe』は通常はコマンドプロンプトという次のような画面で命令を入力することで実行することができます。
コマンドプロンプトはデスクトップ画面左下の虫眼鏡アイコンをクリックし、『cmd』と入力してエンターキーを押すことで起動します。気になる方は実際に確認してみてください。
今回の例では、
shutdown /s /t 3600
と命令していますが、意味としては、
shutdown.exeを使って3600秒後にシャットダウンしろ。
となります。
オプションと呼ばれる『/s』はシャットダウンすることを表し、
『/t』は時間指定することを表します。
時間は秒数で指定でき、今回は60分後にシャットダウンしたいので、60分×60秒=3600秒を入力しています。
ちなみにシャットダウンをキャンセルするオプションは『/a』となります。
今回作成したプログラムでは、『shutdown.exe』を実行するにあたって、Processクラスというものを使っています。
コードでいうと次の箇所になります。
System.Diagnostics.Process ShutDownProc
= new System.Diagnostics.Process();
クラスについてはまた別の記事で詳しく解説します。
今回はProcessクラスというものを使って『shutdown.exe』を実行しているという役割だけ認識していただければ大丈夫です。
次の箇所でProcessクラスを使って『shutdown.exe』を使うことを記述しています。
ShutDownProc.StartInfo.FileName = "shutdown.exe";
次の箇所でオプションを記述しています。
『/s /t 3600』は前述した通り、『3600秒後(60分後)にシャットダウン』という命令になります。
ShutDownProc.StartInfo.Arguments = "/s /t 3600";
最後に命令を実行します。実行するには次のように記述します。
ShutDownProc.Start();
以上が今回のプログラムの解説となります。
まとめ
シャットダウンタイマーを作成する為の導入として、『ボタンを押すと1時間後にシャットダウン』までをプログラミングしてきましたがいかがでしょうか。
自分なりにシャットダウンまでの時間を変更したり、本当に時間通りシャットダウンされるのか等、プログラムを変更して試してみてください。
次回は、今回作ったプログラムをさらに発展させて、シャットダウン時間を指定する機能を追加していきます。
C#の魅力
C#はWindows OSで知られるMicrosoftが開発したプログラミング言語です。
現在、OSシェア75%という圧倒的なユーザ数を誇るWindowsですが、
Windowsデスクトップアプリケーションを作成するとなった場合、最有力として採用されるプログラミング言語のひとつがC#でしょう。
参考: TECH+『3月デスクトップOSシェア、Windowsが増加しMacが減少』
最近ではWindows以外のアプリケーション開発環境(クロスプラットフォーム)も強化され、macOS、Linux上で動作するアプリケーションに加え、iOS、Androidのスマートフォンアプリの開発も可能となっています。
また、ゲームエンジンUnityの開発言語として使用できることもC#の魅力です。
Unityは家庭用ゲーム機(PlayStation、Nintendo Switch、Xbox等)の他にもスマートフォンゲームアプリの開発も可能な人気のゲーム開発環境です。
Unityで作られた有名なゲームとしては『ポケモンGO』、『原神』等が挙げられます。
以上のように非常に汎用性が高く、多種多様な開発現場で使用でき、魅力的なプログラミング言語であるC#ですが、もう一つの特徴である『オブジェクト指向』という考え方が、プログラミング初心者にとっては高いハードルと感じてしまうかもしれません。
オブジェクト指向が難しいとされる所以は、説明する側もどうやって説明すれば伝わるのかわからず、明確な解説方法が確立されていないという点が挙げられるでしょう。
無理に一言でまとめた概念を解説をしたところで、かえってハードルが高いと感じ、習得意欲を削ぐ結果になりかねません。
今回C#の魅力を伝えるうえで便宜上オブジェクト指向という言葉を出しましたが、
C#を習得したい方は、まずはオブジェクト指向という言葉は一旦忘れてしまって構いません。
まずはC#でできることを実際にプログラミングして慣れることが、習得への第一歩だと考えています。
そのうちご自身が実現したいアプリケーションを作成していくうえで、C#の様々な機能やテクニックを覚えていくことになると思います。
C#を使っていればオブジェクト指向はその中で自然と身についていくでしょう。
とはいえ、独学でC#を習得することはなかなか難しいと感じる方も多いかもしれません。
近年はオンラインスクールを利用して短期間で集中して実務レベルまで習熟させるという方も増えています。
プログラミングのオンラインスクールを活用する場合は、現役のエンジニアが講師となるスクールが優位でしょう。開発現場で通用する質の高い実務ノウハウを学ぶことができます。
また、オンラインスクールであれば全国どこからでも受講できるため、わざわざ都会へ出たり交通費をかけることなく、ライフスタイルに合わせて効率的にスキルを身につけることができることが魅力です。
ITエンジニアとしての強力な武器となるC#を習得するための先行投資として、オンラインスクールは一つの選択肢となり得るでしょう。
無料体験できるオンラインスクールもあるため、独学でも習得できそうか、短期集中で学んだ方がいいのか、ご自身の力量を見極めてみるのもいいのではないでしょうか。
こちらの記事ではオンラインスクールを受講する価値はあるのかについて解説しています。あわせてどうぞ
コメント