マイクロソフトの調査では90分以内に再度、パソコンを使うのであれば電源を切るのではなくスタンバイ(スリープ)状態にしたほうがよいとのことです。もし90分以上使用しないのであればシャットダウンしてしまった節電できることになってます。
それから電源を頻繁にON、OFFするとハードディスクに負荷がかかります。そのため使わない時間が短いのであればスタンバイ(スリープモード)状態にしておきましょう。作業を再開するときにパソコンが起動するまで待たされることもありません。
それから個人的にはパスワード管理アプリとしてこれをつかっています。
シャットダウンしてしまうとアプリを起動するためにパスワードを入力しなければなりません。これが地味に面倒くさいです。そこで普段使わないときはスリープにしています。1日に何回もシャットダウン・起動を繰り返したくありません。
スリープさせるときはスタートボタンからここをクリックすれば簡単にできます。
ただこの方法ではスリープから回復したときにこの画面がそのまま残ってしまいます。そこでスリープさせるための簡単なアプリを作成しました。
といってもそれだけなら簡単。
1 |
Application.SetSuspendState(PowerState.Suspend, false, false); |
この一行ですべて解決です。
これだけでは面白くないのでスリープした時刻とそこから復帰した時刻も記録できるようなものをつくりました。
注意する点があって実行ファイルを外付けのハードディスクにおくとスリープから復帰した時間がうまく保存されません。スリープから復帰した直後は外付けのハードディスクがつかえる状態にはなっていないからだと思われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsSleep { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { if(!IsCdrive()) { MessageBox.Show("実行ファイルはCドライブにおいてください", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // ログを保存するファイルのパスを取得する string logFilePath = GetLogFilePath(); if(MessageBox.Show("スタンバイ状態にしますか?", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK) { // スタンバイ状態になった時刻を記録する SaveLogSuspendTime(logFilePath); // 実際にスタンバイ状態にする Application.SetSuspendState(PowerState.Suspend, false, false); // スタンバイから復帰した時刻も記録する SaveLogTimeReturnSuspend(logFilePath); } } // 実行ファイルはCドライブにあるか? static bool IsCdrive() { string path = Application.ExecutablePath; path = path.ToUpper(); if(path.IndexOf("C:\\") != -1) return true; else return false; } // ログを保存するファイルのパスを取得するメソッド // 実行ファイルのなかにlogというフォルダを作成しlog.txtというファイルにする static string GetLogFilePath() { string folderPath = Application.StartupPath + "\\log"; if(!System.IO.Directory.Exists(folderPath)) System.IO.Directory.CreateDirectory(folderPath); string logFilePath = folderPath + "\\log.txt"; return logFilePath; } // スリープさせた時刻を保存するメソッド static void SaveLogSuspendTime(string logFilePath) { DateTime dt = DateTime.Now; string dtString = dt.ToString("yyyy年MM月dd日 HH時mm分ss秒"); string str = dtString + " スリープ"; SaveLog(logFilePath, str); } // スリープから復帰した時刻を保存するメソッド static void SaveLogTimeReturnSuspend(string logFilePath) { DateTime dt = DateTime.Now; string dtString = dt.ToString("yyyy年MM月dd日 HH時mm分ss秒"); string str = dtString + " 復帰"; SaveLog(logFilePath, str); } // ファイルが存在しない場合は作成し、すでに存在するなら追記 static void SaveLog(string filePath, string str) { System.IO.StreamWriter sw; if(System.IO.File.Exists(filePath)) sw = new System.IO.StreamWriter(filePath, true); // ファイルがすでに存在するなら追記 else sw = new System.IO.StreamWriter(filePath); // ファイルが存在しない場合は作成 sw.WriteLine(str); sw.Close(); } } } |