2011-12-27 16 views
5

現在スクリーンセーバーランチャーを取り組んでいますが、スクリーンセーバーのアクティブ化を一定期間遅らせて、マウスの位置がまだアクティブになっていることを確認したい偶発的な起動を防ぐ。実行前にx秒間マウスの位置を確認するスレッドを考えていますが、これは合理的な解決策ですか?私はスクリーンセーバーを書いていないよ一定期間アクションを延期する

デスクトップの指定の隅にマウスを移動すると、 スクリーンセーバーがオンになる ように、私は、アプリケーションを書かれている...私は追加する方法を知りたいですあなたはどのようにした場合 スクリーンセーバー

の不慮の起動を防止するために、その隅にマウスを移動 ときに遅延?

+0

スクリーンセーバーを管理するAPIがあります。あなたはそれについて話していますか? –

+0

低レベルマウスフックを使用して自分の "ホットコーナー"タイプのアプリケーションを書く。マウスが「アクティブ化ゾーン」に入ると、スクリーンセーバーの起動を遅らせる方法を探しているだけです。 – CybrHwk

+2

いいえ、マウスの位置に注意を払うスクリーンセーバーはまったく意味がありません。人間がそれを動かしているときに*起動させることは想定されていません。これを少し考えてみてください。 –

答えて

4

デスクトップの指定の隅にマウスを移動すると、スクリーンセーバーがオンになるように...

マウスがそこに着く、ブーリアン、タイマーを設定します。マウス操作でブール値をクリアします。
タイマーが起動し、フラグがまだ存在する場合にのみ、進みます。

つまり、小さなステートマシンを使用します。これはバックGUI層またはスレッドのロックを呼び出すに話さない 注:ここ

+3

+1 "これのためのスレッドを使用しないでください" – dthorpe

+0

あなたの助けを借りて、この解決策に行ってきました、おかげで、おかげで: – CybrHwk

0

擬似コードは

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

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

    }); 

EDITあります。私のブログ記事C# MultiThreading Using ThreadPool, Anonymous Delegates and Locksには、適切なロッキングを示しているこの状況のインスピレーションを参照してください。

+0

別の本当に関連性の高い答えは、あなたのブログ。 –

関連する問題