スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    PCの起動時間を表示するお

    2月に晒したのを改良しました。
    どうみても自己満足です、本当にありがとうございました。

    [外観]
    systemworkingtime1.4b.png
    「Now」ボタンで更新。
    上段:Windowsの起動時刻、前回更新からの経過時間、処理時間
    下段:Windowsの稼働時間

    [改良点]
    ・ログを吐くようにした。[example]
    ・アイコンを変更
    ・処理時間をWin32APIで正確に計算するようにした
    (前は15ms単位だった)
    ・最小化時にタスクトレイに入れるようにした
    ・フォント大きくしたとか、レイアウトを細々と
    systemworkingtime1.0.png←前はこんなの。

    [ダウンロード]
    SystemWorkingTimes1,4b.exe

    メモリは多くても3MB位しか食いません。
    スタートアップにショートカットを入れておけば、
    常駐してPC起動時間を毎回ログに記録していきます。

    [追記ソース]
    一応ソースを晒しておきます。
    頭悪いソース(;´Д`)


    static void Main()
    {
    Application.Run(new Form1());
    }

    bool m_bReGet = false; //更新のbool値
    DateTime m_bootTime; //PC起動時刻
    DateTime m_previousTime; //前回更新時間
    string logpath = Directory.GetCurrentDirectory() + @"\log.txt"; //log.txtのパス

    //最初に実行
    private void Form1_Load(object sender, System.EventArgs e)
    {
    m_previousTime = DateTime.Now;
    ShowTime();
    Writelog(); //PC起動時刻を記録
    }

    //"Now"ボタンで更新
    private void btnNow_Click(object sender, System.EventArgs e)
    {
    m_bReGet = true;
    ShowTime();
    }

    //表示計算
    private void ShowTime()
    {
    double t = TraceTime.Now; //処理開始時刻をGet

    DateTime nowTime = DateTime.Now;
    TimeSpan ModSpan;

    int time = System.Environment.TickCount / 1000;
    int second = time % 60;
    int minute = (time / 60) % 60;
    int hour = (time / (60*60)) % 24;
    int day = time / (60*60*24);
    txtTime.Text = day + "d " + hour + "h" + minute + "m" + second + "s";

    //更新したか
    if (m_bReGet)
    //更新している場合
    {
    ModSpan = nowTime - m_previousTime;
    txtModSpan.Text = ModSpan.Hours + "h" + ModSpan.Minutes + "m" + ModSpan.Seconds + "s";
    }
    //初回の場合
    else
    {
    txtModSpan.Text = "-"; //更新間隔を"-"で表示

    m_bootTime = nowTime.AddSeconds(-time); //PC起動時間を計算。以後この値を使う。
    txtBootTime.Text = m_bootTime.ToString("MM/dd HH:mm:ss");
    }
    t = TraceTime.Now - t;
    txtCalcurateTime.Text = t.ToString("#0.00") + "ms"; //処理時間を"ms"で表示

    m_previousTime = nowTime; //次回更新時の計算に使う
    }

    //PC起動時間を書き込む
    private void Writelog()
    {
    string writedata = m_bootTime.ToString("g") + ", ";

    StreamWriter writer = new StreamWriter(logpath, true);
    writer.Write(writedata);
    writer.Close();
    }

    //this終了時に稼働時間などを書き込む
    private void Addlog()
    {
    DateTime cTime = DateTime.Now.AddSeconds(30.0); //Windowsが終了するまでを30秒と仮定して加算
    TimeSpan wSpan = cTime - m_bootTime;
    string writedata = cTime.ToString("g") + ", " + wSpan.Days + "d" + wSpan.Hours + "h" + wSpan.Minutes + "m, " + Convert.ToInt32(wSpan.TotalMinutes) + "m\r\n";

    StreamWriter writer = new StreamWriter(logpath, true);
    writer.Write(writedata);
    writer.Close();
    }

    //"Exit"ボタンを押下
    private void btnExit_Click(object sender, System.EventArgs e)
    {
    this.Close();
    }

    //this終了する
    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
    //終了処理を一旦止めて確認メッセージ表示
    if (MessageBox.Show("終了してよろしいですか?", "SystemWorkingTime終了の確認",
    MessageBoxButtons.OKCancel,
    MessageBoxIcon.Exclamation) == DialogResult.OK)
    {
    Addlog();
    notifyIcon1.Visible = false; //タスクトレイのアイコンを消去(保険)
    Application.Exit();
    }
    else
    {
    e.Cancel = true;
    }
    }

    //タスクトレイのアイコンをダブルクリック
    private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
    {
    this.Visible = true;
    if (this.WindowState == FormWindowState.Minimized) //元の状態に戻す
    this.WindowState = FormWindowState.Normal;
    this.Activate(); //最前列に持ってくる
    notifyIcon1.Visible = false;
    }

    //最小化したときにタスクトレイに入れる
    private void Form1_SizeChanged(object sender, System.EventArgs e)
    {
    if (this.WindowState == FormWindowState.Minimized)
    {
    this.Visible = false;
    notifyIcon1.Visible = true;
    }
    }

    //処理時間を計算するためのクラス
    public class TraceTime
    {
    [DllImport("kernel32.dll")]
    extern static short QueryPerformanceCounter(ref long x);

    [DllImport("kernel32.dll")]
    extern static short QueryPerformanceFrequency(ref long x);

    public static double Now
    {
    get
    {
    long cnt = 0;
    long frq = 0;
    QueryPerformanceCounter(ref cnt);
    QueryPerformanceFrequency(ref frq);
    double t = (double)cnt * 1000 / (double)frq; //msで計算
    return t;
    }
    }
    }
    スポンサーサイト

    コメントの投稿

    非公開コメント

    プロフィール

    ヴォルフィード(ヴォル)

    Author:ヴォルフィード(ヴォル)
    職業:社畜
    メール:lich.to.mbre@gmail.com(@を半角に変えてとかそんな感じ)
    戯れ言:放置しすぎた

    ・アニメ視聴リスト(-):
    ゆるゆり
    シュタゲ
    うさぎドロップ
    ピングドラム

    ・ゲーム:
    Xchange Alternative2
    XChange Alternative2


    絵師:
    CARNELIAN
    杉菜水姫
    上田メタヲ

    サークル:
    おたうT-Rかえでの丘Z-Less自称清純派BLACK DOGbolze.丸田道場ローカスタ・キネンシス

    ソフトメーカ:
    07th Expansion
    TYPE-MOON
    Innocent Grey
    アリスソフト
    エルフ
    テリオス
    ORBIT
    BlackCyc
    アトリエかぐや
    ふぐり屋
    ミンク

    ・チェックしてる本:
    ---コミック---
    ToLoveる だーくね巣
    さよなら絶望先生
    生徒会役員共
    ゆるゆり
    ---ラノベ---
    マリア様がみてる(~薔薇のミルフィーユ)


    『桃華月憚』応援中です!

    最近の記事
    最近のコメント
    最近のトラックバック
    月別アーカイブ
    カテゴリー
    ブロとも申請フォーム

    この人とブロともになる

    ブログ内検索
    RSSフィード
    リンク
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。