【问题标题】:On Idle Hide Mouse System-Wide, Show on Movement, from a C# Application空闲时隐藏鼠标系统范围,显示移动,来自 C# 应用程序
【发布时间】:2012-05-17 06:04:56
【问题描述】:

我正在尝试开发一个应用程序,该应用程序在运行时会在 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 秒!解决方案是否只是拥有两个单独的计时器和单独的事件?

非常感谢您的帮助!

【问题讨论】:

    标签: c# winforms mouse hook mouse-cursor


    【解决方案1】:

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

    【讨论】:

    • 好主意。这样,您可以根据需要销毁原始计时器。
    【解决方案2】:

    您不必创建 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();
        }
    }
    

    【讨论】:

    • 谢谢你,但我现在发现我认为工作的代码并没有完全按照我的预期工作,只有当鼠标在我的表单上时才隐藏鼠标,这不是我的本意行为。我想是时候深入研究 WinAPI...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多