0

シャットダウン、ログオフ、ロックなどのシステムイベントを監視する必要があります。

今私は2つの質問があります:

  1. システムがシャットダウンしたり、ログオフしたりする前に、どうすればよいですか?
  2. プロセスがタスクマネージャーを介して強制終了された場合、2番目のプロセスなしで、プロセスが閉じられる前に何かを行う機会はありますか?おそらくそうではないか?(それほど重要ではありません)

私がこれまでに持っているもの:

    public MainWindow()
    {
        InitializeComponent();
        SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
        SystemEvents.SessionEnded += SystemEvents_SessionEnded;
        SystemEvents.EventsThreadShutdown += SystemEvents_ThreadShutdown;
        SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
    }

    private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
    {
        if(e.Mode == PowerModes.Suspend)
        {
            Thread.Sleep(5000);
            Log("PowerMode Suspend: " + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }
        else if(e.Mode == PowerModes.Resume)
        {
            Thread.Sleep(5000);
            Log("PowerMode Resume: " + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }
    }

    private void SystemEvents_ThreadShutdown(object sender, EventArgs e)
    {
        Thread.Sleep(5000);
        Log("EventThread Shutdown: " + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
    }

    private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
    {
        if (e.Reason == SessionSwitchReason.SessionLock)
        {
            Thread.Sleep(5000);
            Log("Locked the machine: " + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }
        else if (e.Reason == SessionSwitchReason.SessionUnlock)
        {
            Thread.Sleep(5000);
            Log("Unlocked the machine: " + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }
        else if (e.Reason == SessionSwitchReason.SessionLogoff)
        {
            Thread.Sleep(5000);
            Log("Logged of the machine: " + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }
    }

    private void SystemEvents_SessionEnded(object sender, SessionEndedEventArgs e)
    {
        if (e.Reason == SessionEndReasons.SystemShutdown)
        {
            Thread.Sleep(5000);
            Log("Shutdown of the machine: " + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }
        else if (e.Reason == SessionEndReasons.Logoff)
        {
            Thread.Sleep(5000);
            Log("Logoff of the machine: " + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }
    }

睡眠は、このイベントの前に行うべきいくつかのアクションをエミュレートする必要があります。Windows Lock&Window Closedのみが機能し、他のものは機能しません。おそらくプログラムがすでに閉じられているためです。

どうすればそれを修正できるでしょうか?

4

0 に答える 0