0

モバイル カートに約 250 台のラップトップがあり、十分に活用されていないことがわかっています。電源投入とシャットダウンのイベントをキャプチャするログ ファイルを書き込むプログラムを作成しています。ただし、即時シャットダウン イベント (ユーザーが電源ボタンを押したままにする) をトラップしようとすると、テキスト ファイルにデータが書き込まれません。

どんな入力でも役に立ちます。前もって感謝します。

コード:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Microsoft.Win32;

    namespace Log
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            string CrLf = System.Environment.NewLine;
            private static int WM_QUERYENDSESSION = 0x11;
            private static int WM_ENDSESSION_CRITICAL = 0x40000000;

            private static bool systemShutdown = false;

            private void Form1_Load(object sender, EventArgs e)
            {
                Write_Data("[" + DateTime.Now.ToString() + "] " + "Power on");            
            }


            protected override void WndProc(ref System.Windows.Forms.Message m)
            {

                if (m.Msg == WM_QUERYENDSESSION)
                {
                    Write_Data("[" + DateTime.Now.ToString() + "] " + "Power off");
                    systemShutdown = true;
                }
                // If this is WM_QUERYENDSESSION, the closing event should be
                // raised in the base WndProc.

                    if (m.Msg == WM_ENDSESSION_CRITICAL)
                    {
                        Write_Data("[" + DateTime.Now.ToString() + "] " + "Critical power down");
                        systemShutdown = true;
                    }

                    base.WndProc(ref m);
            }       

            private void Write_Data(string str_Data)
            {
                using (StreamWriter output = new StreamWriter("../Log.txt", true))
                {
                    output.WriteLine(str_Data);
                }
            }
        }

    }
4

1 に答える 1

2

システムの EventLog http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspxを読んで、これらのイベントがいつ発生したかを見つける方が理にかなっているかもしれません

または、それが理想的でない場合は、シャットダウン イベントをリッスンする代わりに、プログラムの終了にフックし、プログラムが閉じているかどうか、コンピューターがシャットダウンされていると仮定して、そこで Write_Data を呼び出します。コンソール アプリケーションのこの SO スレッド「終了時」のソリューションの一部は、 Windows7 では機能せず、コンソール/フォーム アプリケーションのシャットダウンでは異なる動作をすることに注意してください。

于 2013-04-11T15:45:30.510 に答える