开发者

SystemEvents.SessionEnding not firing

开发者 https://www.devze.com 2023-04-11 19:57 出处:网络
I am developing an windows forms application in c# .net 4.0. I want to capture windows logoff event. Here is the code:

I am developing an windows forms application in c# .net 4.0. I want to capture windows logoff event.

Here is the code:

public Form1()
{
    InitializeComponent();

    SystemEvents.SessionEnding += (s, e) =>
    {
        if (e.Reason == SessionEndReasons.Logoff)
        {
            Mess开发者_如何学编程ageBox.Show("LogOff");
        }
        else if (e.Reason == SessionEndReasons.SystemShutdown)
        {
            MessageBox.Show("ShutDown");
        }
    };
}

Why isn't my sessionEnding firing?


  1. It depends on the configuration that is set on gpedit.msc.

Open gpedit.msc, navigate to Computer Configuration > Administrative Templates > System > Shutdown Options and choose Turn off automatic termination of applications that block or cancel shutdown. Since mine laptop configure make it automatic shutdown, so it will never fire session ending

  1. Perhaps you can move your code above into entry point of its windows (in the main).

  2. Perhaps you can override windows message. You can see it in MSDN library documentation. http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.sessionending.aspx

  3. Shutdown message pump has been re route by other software and not re route to your apps


This could be useful to someone.

if form close event is included

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
    }

then SessionEnding will not be fired, i just encoutered this problem and rectified it

void SystemEvents_SessionEnding(object sender, Microsoft.Win32.SessionEndingEventArgs e)
    {}

here i need to prevent Form close upon Alt+F4 command, so i added this form closing event this resulted in this issue. so we can integrate session ending event in form close event. Option 2 in Refered from stackoverflow answer

0

精彩评论

暂无评论...
验证码 换一张
取 消