前回から引き続き、C#でWindows OSを時間指定してシャットダウンするアプリケーションを作成していきます。
アプリの最終的な完成イメージは以下の動画の通りです。
時間、分、秒を設定して、シャットダウンまでの時間を任意に指定、キャンセルすることができます。
第2回目となる今回は『時間を指定してシャットダウン』までをプログラミングします。
簡単なプログラムを徐々にステップアップさせていきますので、その過程でプログラミングに必要な基礎知識を身につけることができます。
作業時間としては30分程度です。
説明中の見えにくい画像はクリックすることで拡大できます。
前回作成したアプリ、今回作成するアプリ
前回は『ボタンを押すと1時間後にシャットダウン』までをプログラミングしました。
今回は『コンボボックスから選択した時間でシャットダウン』までを作成します。
難しそうに見えますが、プログラムとしては変更箇所は1行のみです。
前回の続きから機能を追加していくので、『ボタンを押すと1時間後にシャットダウン』するアプリをまだ作成していない場合は、以下のリンクを参考に作成してください。
フォームのレイアウト
まずはコンボボックスを置くスペースを作るために[button_Shutdown]のサイズを下の画面のように小さくします。
また、[プロパティ]の[Text]を『一時間後にシャットダウン』の『一』を消して『時間後にシャットダウン』に変更します。
つづいて[ツールボックス]から[ComboBox]を選択し、フォーム上に配置します。
配置したコンボボックスは、時間を選択する役割にするので、名前は『comboBox_Hour』とします。
フォーム上のコンボボックスを選択して[プロパティ]の[Name]を『comboBox_Hour』に変更します。
続いて、コンボボックスに選択候補の時間の数字を入力します。
フォーム上のコンボボックスを選択して[プロパティ]の[Items]の端にあるボタン[…]をクリックします。
[String Collection Editor]というウィンドウが表示されるので、1~10までの数字(半角)を改行して入力します。
この数字がシャットダウンまでの時間の選択肢としてコンボボックスに表示されます。
入力が終わったら[OK]で画面を閉じます。
次にコンボボックスに最初に選択されている数字を表示したいので、コンボボックスの[プロパティ]の[Text]に『1』(半角)を入力します。
これでフォームのレイアウトは完了です。
引き続きプログラミングを行います。
プログラミング
それではプログラミングに入ります。
プログラムコードを表示するには、画面右側の[ソリューションエクスプローラー]の[Form1.cs]を右クリックして[コードの表示]を選択するか、もしくはF7キーを押します。
プログラムの解説は後述するので、ひとまずプログラムを入力しましょう。
今回変更する箇所は一行のみです。
『時間後にシャットダウン』ボタンをクリックした時に実行される[button_Shutdown_Click]内のプログラムを変更します。
対象となるのは次の行です。
ShutDownProc.StartInfo.Arguments = "/s /t 3600";
次のように変更します。長くなるので2行にしていますが、1行におさめてしまっても構いません。
“/s /t “のtの後ろには半角スペースが入ります。
ShutDownProc.StartInfo.Arguments
= "/s /t " + (int.Parse(comboBox_Hour.Text) * 60 * 60);
[button_Shutdown_Click]内全体としては次のようになります。
// 変更前
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();
}
// 変更後
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 " + (int.Parse(comboBox_Hour.Text) * 60 * 60);
ShutDownProc.Start();
}
これでプログラムは完成なので、実行してみましょう。
画面上部の▶ボタン、または[F5]キーを押します。
入力ミス等がなければ、作成したフォームが表示されます。
コンボボックスから時間を選んでボタンを押してみましょう。
シャットダウン通知や、シャットダウンのキャンセル通知は表示されたでしょうか?
以上で今回のプログラミングは終了です。おつかれさまでした。
解説
プログラムの解説をします。
前回までの復習として、Windowsにあらかじめ備わっている『shutdown.exe』という実行ファイルを活用することでシャットダウン機能を実装しました。
その中で、シャットダウンまでの時間指定は、次の箇所で行いました。
ShutDownProc.StartInfo.Arguments = "/s /t 3600";
意味としては、『3600秒後(60分後)にシャットダウン』という命令になります。
内容を思い出せない場合は、前回の記事の解説を参考にしてください。
今回は、この時間指定3600(秒)の部分を、コンボボックスで選択した時間に置き換えることで、機能を実現しています。
コンボボックス[comboBox_Hour]から選択した数字を受け取るには次のように記述します。
comboBox_Hour.Text
コンボボックスで『1』を選択していれば、『comboBox_Hour.Text』が”1″に置き換わると思っていただければいいです。
この”1″に60分×60秒をかけることで、3600秒(1時間)という数値を算出しています。
たとえば他の数字を選択した場合も、次のように算出されます。
【2を選択】 2 × 60 × 60 = 7200(秒)
【3を選択】 3 × 60 × 60 = 10800(秒)
【4を選択】 4 × 60 × 60 = 14400(秒)
残りは次の記述についての解説です。
int.Parse(comboBox_Hour.Text)
ここまで、『数字』と『数値』はあえて分けて書いていましたが、C#をはじめとする多くのプログラミング言語では、計算に用いる『数値』と、『文字列』としての『数字』は区別されます。
コンボボックスから受け取る値は、見た目は数値の1でも『文字列』(数字)という扱いなので、このままでは計算ができません。
試しにプログラム中の『int.Parse』を削除してみてください。
次のようなエラーが表示されるはずです。
エラーの説明として書かれている『string』が文字列を意味し、『int』が数値を意味します。
文字列を数値として計算することができない。といった内容のエラーです。
そこで使用するのが、『int.Parse 』です。『int.Parse 』を使うと、文字列を数値に変換することができます。
これで無事に後ろに続く計算を行うことができます。
ちなみに『string』や『int』は『型』と呼ばれ、これ以外にも多数存在しますが、次回以降の記事でご紹介します。
以上が今回のプログラムの解説となります。
まとめ
シャットダウンタイマー作成の第2回目として、『時間を指定してシャットダウン』までをプログラミングしてきましたがいかがでしょうか。
今回はコンボボックスの使い方と、文字列と数値の違いについてご紹介しました。
使い方になれたら、コンボボックスを追加したり、数字を追加したりして遊んでみてください。
次回は、今回作ったプログラムをさらに発展させて、ひとまず見た目の完成までを解説していきます。
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#を習得するための先行投資として、オンラインスクールは一つの選択肢となり得るでしょう。
無料体験できるオンラインスクールもあるため、独学でも習得できそうか、短期集中で学んだ方がいいのか、ご自身の力量を見極めてみるのもいいのではないでしょうか。
こちらの記事ではオンラインスクールを受講する価値はあるのかについて解説しています。あわせてどうぞ
コメント