2011-09-19 51 views
-1

可能重複:
Detecting idle users in Winforms會議out功能

我與桌面應用程序的工作,我想鎖定應用程序,如果它是從一個特定的時間閒置,如果發生任何事件,則應重置到期時間。當應用程序被鎖定時,如果用戶想在應用程序中再次登錄,則必須再次輸入用戶名和密碼。

現在我正在使用計時器控制來處理此功能,但我不知道寫入用於重置到期時間的代碼的正確位置。

普萊斯告訴我怎樣能做到這一點的工作...

+0

恕我直言,這是不夠的Windows有一個屏幕保護程序,並在必要時可以鎖定計算機。爲什麼你想添加一個額外的圖層來做同樣的事情? – jgauffin

+1

@jgauffin:在美國,這種要求通常存在於政府法規遵從性方面。 – Gabe

回答

0

你可以有一個定時器控制,當觸發隱藏所有的表格,併產生一個登錄框。

這應該指出你在正確的方向 - 我不會給你的代碼。

+0

我將如何重置到期時間。在我的表單中有多個控件,我是否需要在每個控件的點擊事件中重置到期時間。 –

+0

我修改了我的答案,因爲隱藏表單可能會更有意義,只要輸入正確的密碼,您可以再次顯示它們。 –

0

這是一個很好的例子。 Detecting Application Idleness

您也可以使用Application.Idle Event,但您必須實現自己的鎖定邏輯。事實上,你甚至可以使用它來重置/啓動你的理想計時器。

編輯1

另一個好articleexample

編輯2

此函數檢索自上次用戶輸入以秒的時間。但是,這不是專門針對您的應用程序,而是針對Windows。查看here瞭解更多詳情。而here是一個類似的線程。

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 = lastInputInfo.dwTime; 

     idleTime = envTicks - lastInputTick; 
     } 

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

Application.Idle事件中「idle」的定義是「不忙處理」,而OP的閒置定義是「用戶不相互作用」。 – Gabe

+0

如果我正確地閱讀了文檔,這會給出「當前桌面」的最後一次交互,而不是專門「這一個應用程序」。因此,如果用戶啓動了此安全應用程序,但在其他某個應用程序中運行,此方法將返回「忙碌」而非「空閒」。 –

+0

@ Hans Kesting:是的,您的正確的LastInputInfo適用於不適用於特定應用程序的窗口。 – CharithJ