Вопрос

Я делаю приложение, которое используется для очистки временных файлов, истории и т. Д., Когда пользователь выходит из входа. Итак, как я могу узнать, собирается ли система выйти из системы (в C#)?

Это было полезно?

Решение

Есть собственность в Окружающая среда класс, который рассказывает о том, начался ли процесс выключения:

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
     }
  }

Но если вы хотите только очистить Temp File, то я думаю, что различие между выключением или выходом не имеет никакого последствия для вас.

Другие советы

Если вам специально нужно событие отключения, вы можете изменить код, предоставленный в ответе 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
    }
}

Вы можете использовать WMI и посмотреть WIN32_ComputerShutDownEvent, где тип равен 0. Вы можете найти больше информации об этом событии здесь, и больше об использовании wmi в .net здесь.

Если у тебя есть Форма Windows, вы можете справиться FormClosing событие, затем проверьте e.CloseReason enum value, чтобы определить, равно ли это CloseReason.WindowsShutDown.

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        // Your code here
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top