2010-08-02 7 views
0

J'ai une exigence différente dans un de mes projets, quand je cours mon exe et le rende au repos (c'est-à-dire sans clic, min, max), après un certain temps (minuterie) il devrait être automatiquement fermé. Si quelqu'un a cliqué avant l'heure donnée, la minuterie doit être réinitialisée pour la même période. Comment puis-je savoir si l'exe est inactif ou non?Pour trouver la fenêtre EXE est active ou pas

+0

Console, formulaires ou WPF? – spender

+0

Je viens de changer votre edit où vous avez ajouté "winforms" au corps de la question pour l'ajouter comme balise à la place. Il est plus utilement placé là et aidera les autres à trouver cette question et les réponses = – Rob

Répondre

1

Vous voudrez peut-être jeter un oeil à l'événement Application.Idle (Remarque: Applicable uniquement à une application WinForms, pour autant que je sache).

Si vous le combinez avec une minuterie que vous arrêtez/réinitialisez chaque fois que votre application reçoit une entrée, cela devrait vous donner à peu près ce que vous cherchez.

+0

Salut rob merci pour votre réponse, en fait j'ai utilisé du code non managé et l'a réalisé.je vais le poster ici.Merci – karthik

0

public class GlobalMouseHandler: IMessageFilter

{ 

    public delegate void EventHandlerForActiveState(); 

    public event EventHandlerForActiveState onActive; 

    public event EventHandlerForActiveState onStateChanged; 

    private const int WM_KEYDOWN = 0x100; 

    //private const int WM_HSCROLL = 0x114; 

    //private const int WM_VSCROLL = 0x115;   

    private const int WM_LBUTTONDOWN = 0x201; 

    private const int WM_LBUTTONUP = 0x202; 

    private const int WM_RBUTTONDOWN = 0x204; 

    private const int WM_RBUTTONUP = 0x205; 

    //private const int WM_MBUTTONDBLCLK = 0x209; 

    private const int WM_MOUSEWHEEL = 0x20A; 

    private const int WM_GETMINMAXINFO = 0x024; 

    public bool PreFilterMessage(ref Message m) 

    { 

     if (m.Msg == 275) 

     { 

      return false; 

     } 

     switch (m.Msg) 

     { 

      case WM_LBUTTONDOWN: 

       if (onActive != null) 

        onActive(); 

       break; 

      case WM_LBUTTONUP: 

       if (onActive != null) 

        onActive(); 

       break; 

      case WM_RBUTTONDOWN: 

       if (onActive != null) 

        onActive(); 

       break; 

      case WM_RBUTTONUP: 

       if (onActive != null) 

        onActive(); 

       break; 

      case WM_MOUSEWHEEL: 

       if (onActive != null) 

        onActive(); 

       break; 

      //case WM_ACTIVATE: 

      // if (onActive != null) 

      //  onActive(); 

      // break; 

      case WM_KEYDOWN: 

       if (onActive != null) 

        onActive(); 

       break; 

      case WM_GETMINMAXINFO: 

       if (onStateChanged != null) 

        onStateChanged(); 

       break; 



      //case WM_HSCROLL: 

      // if (onActive != null) 

      //  onActive(); 

      // break; 

      //case WM_VSCROLL: 

      // if (onActive != null) 

      //  onActive(); 

      // break; 

     } 

     return false; 

    } 

} 

GlobalMouseHandler poignée = new GlobalMouseHandler(); handle.onActive + = new GlobalMouseHandler.EventHandlerForActiveState (handle_onActive); Application.AddMessageFilter (handle); J'ai utilisé cette classe et fait cela.

+0

Manqué certains. Vérifiez http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/815cfbf9-2303-4637-a7c2-d25ef5c1eeb3 –

Questions connexes