Pergunta

Estou fazendo um aplicativo usado para limpar os arquivos de temperatura, histórico etc. quando o usuário efetuará login. Então, como posso saber se o sistema vai fazer logoff (em C#)?

Foi útil?

Solução

Existe uma propriedade em Meio Ambiente aula que fala sobre se o processo de desligamento foi iniciado:

Environment.HasShutDownStarted

Mas depois de pesquisar no Google, descobri que isso pode ser útil para você:

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

Mas se você deseja limpar apenas o arquivo temporário, acho que distinguir entre desligamento ou log OFF não é de nenhuma conseqüência para você.

Outras dicas

Se você precisar especificamente do evento de log-off, poderá modificar o código fornecido na resposta do TheVillageidiot da seguinte forma:

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

Você pode usar o WMI e assistir ao Win32_ComputerShutdownEvent, onde o tipo é igual a 0. Você pode encontrar mais informações sobre este evento aqui, e mais sobre o uso do WMI no .NET aqui.

Se você tem um Formulário do Windows, você pode lidar com o FormClosing evento, então verifique o e.CloseReason valor enum para determinar se é igual a CloseReason.WindowsShutDown.

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        // Your code here
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top