在空闲时隐藏鼠标系统范围,在C#应用程序中显示运动

时间:2012-05-08 18:03:22

标签: c# winforms mouse hook mouse-cursor

我正在尝试开发一个应用程序,在运行时,即使我的应用程序不在前台,也会在5秒不活动后将鼠标光标隐藏在屏幕上的任何位置。然后,一旦鼠标再次移动,鼠标应立即重新出现。

我一直在阅读很多关于低级别鼠标钩子的内容,但似乎无法绕过代表和回调,对我而言,使代码更难以阅读。

以下是我在解决方案方面一直在寻找的一些事项:

Hide mouse cursor after an idle time

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 个答案:

答案 0 :(得分:4)

在表单上为MouseMove事件添加处理程序,然后在Cursor.Show()处理程序中调用MouseMove

答案 1 :(得分: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();
    }
}