2011-05-04 133 views
2

可能重複:
Check if an application is idle for a time period and lock it如何檢測我的應用程序在c#中空閒?

假設我有一個C#開發的Windows產品。現在需要的是,如果應用程序正在運行並且處於空閒狀態,並且用戶嘗試再次與該應用程序進行交互,則會出現登錄屏幕。如何檢測我的應用程序在運行時是否處於空閒狀態?請指導我完成這項工作。

+3

Dupicated http://stackoverflow.com/questions/1541981/check-if-an-application-is-idle-for-a-time-period-and-lock-it – 2011-05-04 11:37:31

+0

我發現幾個鏈接,請檢查它們http://msdn.microsoft.com/en-us/library/system.windows.forms.application.idle.aspx http://blog.perfectapi.com/2008/05/detecting-idle-state-in-winforms -apps/ – SharpUrBrain 2011-05-04 12:23:29

回答

6
  1. 將計時器控件添加到您的 應用程序中。
  2. Subscribe to mouseover and keydown events - when they fire,reset the timer。
  3. 當定時器發生火災時(例如,鼠標 未移動且按鍵的數量未按下0x35時,按下 ),鎖定 登錄的屏幕/提示。
+1

訂閱鼠標懸停可能會非常頻繁地觸發定時器。可能Keydown或mousedown事件可能是很好的訂閱。 – CharithJ 2011-05-04 11:55:37

+0

是的 - 你需要看看什麼最適合你的需求。 (雖然重置計時器並不昂貴,所以不要擔心) – Nathan 2011-05-04 11:58:11

0

捕獲Form類對象的離開事件以知道它已失去焦點。

1

您可以使用Control.LostFocus記錄時用戶導航離開然後使用Control.GotFocus檢查多少時間已經過去了,以確定他們是否需要登錄。

1

何去何從我簡單的解決方案:

Point cursorPoint; 
int minutesIdle=0; 

private bool isIdle(int minutes) 
{ 
    return minutesIdle >= minutes; 
} 

private void idleTimer_Tick(object sender, EventArgs e) 
{ 
    if (Cursor.Position != cursorPoint) 
    { 
     // The mouse moved since last check 
     minutesIdle = 0; 
    } 
    else 
    { 
     // Mouse still stoped 
     minutesIdle++; 
    } 

    // Save current position 
    cursorPoint = Cursor.Position; 
} 

您可以設置在60000區間運行的定時器。通過這種方式,您只需知道用戶不會移動鼠標多少分鐘。您也可以在Tick事件本身上調用「isIdle」來檢查每個間隔。

相關問題