【问题标题】:How to trigger the auto-hide icon in c#?如何在c#中触发自动隐藏图标?
【发布时间】:2012-10-18 09:45:07
【问题描述】:

我有一个应用程序。如果应用程序在一定时间内没有被使用,它应该隐藏。当应用程序被隐藏并且我们将鼠标悬停在图标上时,它应该会被恢复。

我该怎么做?提前致谢。

【问题讨论】:

    标签: c# show-hide notifyicon


    【解决方案1】:

    您必须在应用程序中定义一个计时器,该计时器将计算鼠标不在窗体/窗口上方的时间。然后隐藏您的应用程序。

    下载WPF NotifyIcon 并处理 MouseOver 事件,该事件将显示 Form/Window

    编辑:

    如果您不需要将应用程序最小化到托盘并隐藏窗口以将其保留在桌面上 -> 使用相同的算法,但不隐藏窗口,只需将透明度设置为 0% 或 10%。当鼠标悬停时 - 将透明度设置为 100%。

    【讨论】:

    • 我更喜欢你的第一种方法。如果应用程序是透明的,您仍然可以与之交互,对吗?因此,我认为隐藏/最小化应用程序“更安全”......
    【解决方案2】:

    就像 JesseJames 所说,使用计时器来测量应用程序的非活动时间,并在一段时间后将其隐藏。当鼠标悬停在 NotifyIcon 上时重新激活它。这是一个完成这项工作的示例 WindowsForms 解决方案:

    private Timer _timer;
    private int _ticks;
    
    public Form1()
    {
        _timer = new Timer { Interval = 1000, Enabled = true };
        _timer.Tick += TimerTick;
    
        Activated += Form1_Activated;
        MouseMove += Form1_MouseMove;
        //notifyIcon1 is an icon set through the designer
        notifyIcon1.MouseMove += NotifyIcon1MouseMove;
    }
    
    protected void TimerTick(object sender, EventArgs e)
    {
        //After 5 seconds the app will be hidden
        if (_ticks++ == 5)
        {
            WindowState = FormWindowState.Minimized;
            Hide();
            _timer.Stop();
            _ticks = 0;
        }
    }
    
    protected void NotifyIcon1MouseMove(object sender, MouseEventArgs e)
    {
        WindowState = FormWindowState.Normal;
        Show();
        _ticks = 0;
        _timer.Start();
    }
    
    protected void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        _ticks = 0;
    }
    

    也许存在一个更清洁的解决方案,我不知道,但它可以让你上路。 WPF 的原理相同,只是代码略有不同。希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      要查看用户是否进行了任何输入,您可以使用类似的方法,例如this one。为了让您的应用程序再次可见,您需要一种方法来获取全局鼠标和键盘输入,为此您可以使用钩子,您可以为 here 找到一个解决方案。如果触发了钩子,它实际上只取决于您使用的 UI 类型,但调用特定的 hideshow 方法就足够了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多