2011-06-27 15 views
0

システムアイドル状態を提供するものはありますか? C#を使用して、すべてのセッションでシステムのアイドル時間を取得し、誰もX分間システムを使用していない場合はログアウトする必要があります。システムアイドル状態をチェックし、5分後にシステムをログアウト状態にする(使用していない場合)

このことについてどんな考え.....

+0

があなたに欠けているサービスとして実行するために取得するには、Windowsターミナルサーバー上またはデスクトップセッションなどのセッションを自動ログアウト?私は両方のための解決策がありますが、それを行う方法は、ターミナルサーバーを実行しているかどうかによって異なります。 –

+0

yaa ..私はログインボタンが付いたウィンドウ(デスクトップAPPS)のフォームを持っていて、いくつかのセッションは、ユーザーのログイン時に実行されていて、システムにログインするときにユーザーがフォームを使用していないときに自動ログアウトをしたい。私..それは本当に私を助けるだろう.. – user682417

答えて

3

あなたは、これは、グループポリシーを介して、またはターミナルサービス構成を介して行うことができますターミナルサーバーを実行している場合

Server 2003

Server 2008

Server 2008 R2


デスクトップセッションをログオフするには、バックグラウンドで実行するプログラム(システムサービスとしては機能しません。対話セッションの一部として実行する必要があります)を使用して、ログイン時間をGetLastInputInfo、それからExitWindowsExを呼び出してログオフすることができます。

class Program 
{ 
    [StructLayout(LayoutKind.Sequential)] 
    struct LASTINPUTINFO 
    { 
     public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO)); 

     [MarshalAs(UnmanagedType.U4)] 
     public int cbSize; 
     [MarshalAs(UnmanagedType.U4)] 
     public UInt32 dwTime; 
    } 


    [DllImport("user32.dll")] 
    static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); 

    [DllImport("user32.dll", SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool ExitWindowsEx(uint uFlags, uint dwReason); 

    static void Main(string[] args) 
    { 
     bool running = true; 
     while (running) 
     { 
      if (GetLastInputTime() > 60 * 15) //15 min idle time 
      { 
       ExitWindowsEx(0, 0); 
       running = false; 
      } 
      Thread.Sleep(1000 * 60); //check once per min. 
     } 
    } 

    static int GetLastInputTime() 
    { 
     int idleTime = 0; 
     LASTINPUTINFO lastInputInfo = new LASTINPUTINFO(); 
     lastInputInfo.cbSize = Marshal.SizeOf(lastInputInfo); 
     lastInputInfo.dwTime = 0; 

     int envTicks = Environment.TickCount; 

     if (GetLastInputInfo(ref lastInputInfo)) 
     { 
      int lastInputTick = (int)lastInputInfo.dwTime; 

      idleTime = envTicks - lastInputTick; 
     } 

     return ((idleTime > 0) ? (idleTime/1000) : 0); 
    } 

} 

私は一度これを行うために必要なトラブル発生源を見つけることがあったし、これは質問のこの種をgoggleingされる他の誰かを助けるかもしれません。私が答えているにもかかわらず、私は質問に投票していません。

UPDATEHere is a techniqueこれは

+0

そのようなデスクトップセッション... – user682417

+0

私たちはWindowsフォームにタイマを追加するようなサービスがあります..ユーザーログインは、カウントを開始し、ユーザーが何もしないタイマーはゼロで、システムは自動的にログアウトします。私はこのタイプのサービスを探しています。 – user682417

関連する問題