从系统获取注销事件

时间:2009-06-12 03:54:18

标签: c# .net wpf logout

我正在做一个用于在用户注销时清除Temp文件,历史记录等的应用程序。那我怎么知道系统是否要注销(在C#中)?

4 个答案:

答案 0 :(得分:9)

环境类中有一个属性可以告诉关闭进程是否已经启动:

Environment.HasShutDownStarted

但是经过一些谷歌搜索后,我发现这可能对你有所帮助:

 using Microsoft.Win32;

 //during init of your application bind to this event  
 SystemEvents.SessionEnding += 
            new SessionEndingEventHandler(SystemEvents_SessionEnding);

 void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
 {
     if (Environment.HasShutdownStarted)
     {
         //Tackle Shutdown
     }
     else
     {
         //Tackle log off
     }
  }

但如果您只想清除临时文件,那么我认为区分关闭或注销对您没有任何影响。

答案 1 :(得分:8)

如果您特别需要注销事件,可以修改TheVillageIdiot答案中提供的代码,如下所示:

using Microsoft.Win32;

//during init of your application bind to this event   
SystemEvents.SessionEnding += 
    new SessionEndingEventHandler(SystemEvents_SessionEnding);

void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) 
{     
    if (e.Reason == SessionEndReasons.Logoff) 
    {  
        // insert your code here
    }
}

答案 2 :(得分:0)

您可以使用WMI并观察Win32_ComputerShutdownEvent,其中Type等于0.您可以找到有关此事件here的更多信息,以及有关在.NET here中使用WMI的更多信息。

答案 3 :(得分:0)

如果您具有 Windows窗体,则可以处理FormClosing事件,然后检查e.CloseReason枚举值以确定它是否等于CloseReason.WindowsShutDown

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        // Your code here
    }
}