2017-11-23 2 views
1

나는이 질문은 이미 How to detect my application is idle in c# (form covered)?에 요청되었다는 것을 알고있는 유휴 상태 인 경우 식별하고 How to detect my application is idle in c#? 에하지만 그 게시물에 내 문제에 대한 최적의 솔루션을 찾을 수 없습니다합니다.방법 응용 프로그램 창

특정 시간이 지나면 로그 아웃해야하는 응용 프로그램이 있습니다. 현재 마지막 사용자 입력에서 틱 수를 알려주는 getLastInput 메서드를 사용하고 있습니다. 현재 시간에서이 시간을 빼고이 시간을 fromMiliseconds를 사용하여 변환합니다. 마지막 입력에서 경과 된 시간이 우리 임계 값보다 큰지 확인한 후 로그 아웃합니다.

문제는 getLastInput 메소드가 신속하게 리턴되고 입력이 애플리케이션에 입력되지 않았음에도 불구하고 diff가 임계 값에 도달하지 않는다는 것입니다.

나는 입력이 발생할 때마다 타이머를 재설정해야하기 때문에 Windows를 통한 마우스/키 이벤트에 대한 연결이 느려질 것이라고 생각합니다.

나는 당신의 아이디어를 듣게되어 기쁩니다.

답변

0

지금까지 내가 아는 한, 사용자 상호 작용에 대한 검사를 우회 할 수있는 방법이 없지만, 실제로 그들에게 조금 밝게 수 :

using System; 
using System.Windows.Forms; 

namespace MyApp 
{ 
    [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] 
    public class MyForm : Form, IMessageFilter 
    { 
     public MyForm() 
     { 
      // Your code... 

      InitializeComponent(); 

      Application.AddMessageFilter(this); 
     } 

     public Boolean PreFilterMessage(ref Message m) 
     { 
      Boolean activated = (m.Msg == 0x010) || (m.Msg == 0x0A0) || (m.Msg == 0x100) || (m.Msg == 0x101) || (m.Msg == 0x200); 

      if (activated) 
       // Your timer logics... 

      return false; 
     } 
    } 
} 
0

당신은 해결하기 위해 System.Timers을 사용할 수 있습니다 당신의 발행물.

System.Timers.Timer timer1 = new System.Timers.Timer(); 
      timer1.Interval = 1000; //milliseconds after which you want to exit the application 
      timer1.Start(); 
      timer1.Elapsed += TimerTick; 

private void TimerTick(object sender, ElapsedEventArgs e) 
    { 
    if (Win32.GetIdleTime() > 1000) 
     { 
     Environment.exit(); 
     } 
    } 
관련 문제