2009-06-12 8 views
7

私は、ユーザーがログオフするときにTempファイル、履歴などを消去するために使用されるアプリケーションを実行しています。では、システムがログオフするかどうかを(C#で)どのように知ることができますか?システムからログオフイベントを取得する

答えて

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

しかし、一時ファイルを消去したいだけなら、シャットダウンとログオフの区別はあなたにとって重要ではないと思います。

+0

は、あなたがシャットダウン中にものを行うには非常に少しの時間を持っているビスタ+上で、しかし心に留めておいてくださいあなたが何らかの理由でブロックしたり、待つことができないようにしてください。(ネットワーク共有上にあるかもしれないファイルを削除しようとするなど) –

+0

@Paulに感謝してください。ウィンドウは次回の再起動時やログイン時に消去されますか? – TheVillageIdiot

0

あなたは、WMIを使用するとタイプあなたは、このイベントhere、および.NET hereでWMIを使用する方法の詳細についての詳細な情報を見つけることができます0に等しいWin32_ComputerShutdownEventを見ることができます。

6

あなたは、具体的ログオフイベントが必要な場合は、次のように、あなたは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 
    } 
} 
関連する問題