2011-12-27 96 views
5

我目前工作的一個屏幕保護程序啓動器的作用,但我希望延遲激活屏幕保護程序一段時間,以確保鼠標的位置仍然處於的位置來激活它,防止意外激活。我正在考慮某種線程在執行前檢查鼠標位置x秒,這是否是一個明智的解決方案?延遲一段時間

我不寫一個屏幕保護程序,我寫了一個應用程序,以便 當您移動鼠標到桌面的指定一角, 屏幕亮起......我想知道如何添加延遲,當你 將鼠標移動到那個角落,以防止 屏保

的意外發射。如果又如何?

+0

有一個API來管理屏幕保護程序。你在說這個嗎? – 2011-12-27 23:12:26

+0

使用Low Level鼠標掛鉤編寫我自己的「Hot Corners」類型的應用程序。我所有的工作,只是尋找一種方式來延遲啓動屏幕保護程序,一旦鼠標在「激活區」 – CybrHwk 2011-12-27 23:21:55

+2

不,一個注意鼠標位置的屏幕保護程序根本沒有意義。當人類移動它時,它不應該激活*。想一想。 – 2011-12-27 23:23:16

回答

4

,這樣當您移動鼠標到桌面的指定角落,屏幕亮起......

當鼠標到達那裏,設置一個布爾值和一個計時器。使任何鼠標操作清除布爾值。
只有當計時器觸發並且標誌仍然存在時,請繼續。

換句話說,使用一個小的狀態機。

+3

+1爲「不要使用此線程」 – dthorpe 2011-12-28 00:18:56

+0

去這個解決方案,工作一種享受,感謝您的幫助:) – CybrHwk 2011-12-30 14:39:05

0

這裏是僞代碼

var CurrentMouse = ...; // Get mouse coordinates. 
    ThreadPool.QueueUserWorkItem(  
    (s) => { 
      Thread.Sleep(500); // Half a second 

     // if (Mouse did not move) 
     //  Launch Screen Saver 

    }); 

編輯: 注意這不會給調用回GUI層或螺紋鎖固說話。在我的博客文章C# MultiThreading Using ThreadPool, Anonymous Delegates and Locks上看到這種情況的靈感,它確實顯示了正確的鎖定。

+0

另一個沒有真正相關的答案,有一個鏈接你的博客。 – 2012-01-16 16:14:01