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 秒!解决方案是否只是拥有两个单独的计时器和单独的事件?

非常感谢你的帮忙!

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 回答