2

アプリがフォアグラウンドになくても、実行中に 5 秒間非アクティブになった後、画面上にあるマウス カーソルを非表示にするアプリケーションを開発しようとしています。次に、マウスが再び移動すると、マウスはすぐに再表示されます。

私は低レベルのマウス フックについて多くのことを読んできましたが、デリゲートとコールバックに頭を悩ませているようには見えず、コードが読みにくくなっています。

解決策の観点から私が検討してきたことのいくつかを次に示します。

アイドル時間後にマウス カーソルを非表示にする

http://blogs.msdn.com/b/toub/archive/2006/05/03/589468.aspx http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks -in-C

そして、私はこれに最も近いように見えました: http://weblogs.asp.net/jdanforth/archive/2011/03/19/detecting-idle-time-with-global-mouse-and-keyboard-hooks-in- wpf.aspx

私の問題は、メイン フォームに 5 秒間タイマーを設定すると、マウスが非アクティブの場合、その 5 秒後にマウスが消えますが、マウスが再表示されるまでに 5 秒かかることです。解決策は、単に 2 つの別々のタイマーと別々のイベントを用意することでしょうか?

助けてくれてどうもありがとう!

4

2 に答える 2

4

フォームにイベントのハンドラーを追加してから、ハンドラーを呼び出しMouseMoveます。Cursor.Show()MouseMove

于 2012-05-08T18:22:47.733 に答える
1

2 つの異なるタイマーを作成する必要はありません。同じタイマーを使用しますが、カーソルが非表示かどうかを追跡するプライベート メンバー変数があります。非表示にすると、タイマーをリセットしてもっと短く (たとえば 500 ミリ秒)、追跡を続けてオンに戻すことができます。

これを試すことができます:

private Timer t;
void OnLoad(object sender, EventArgs e)
{
    t = new Timer();
    t.Interval = 5000;
    t.Tick += new EventHandler(t_Tick);
}

private bool _hidden = false;

void t_Tick(object sender, EventArgs e)
{
    if(!_hidden)
    {
         Cursor.Hide();
         t.Interval = 500;
    }
    else
    {
         if(--some parameter---)
              Cursor.Show();
    }
}
于 2012-05-08T18:10:51.227 に答える