【问题标题】:C# Balloon Notification Popup over all other appsC# Balloon Notification Popup 覆盖所有其他应用程序
【发布时间】:2014-06-10 21:21:20
【问题描述】:

我在 C# 中有一个气球弹出窗口(来自 notifyIcon),效果很好,除非用户监视器上有全屏应用程序,例如电源点演示。在这种情况下,弹出窗口根本不会显示。但是,一旦该应用退出或最小化(或将任务栏置于前面),您就可以再次看到气球弹出窗口。

有没有办法让这个弹出窗口显示在所有窗口上?类似于表单的“Top Most”设置?如果有人需要,我的气球代码如下。

notifyIcon1.BalloonTipText = "Issue found!";
notifyIcon1.ShowBalloonTip(5000);

谢谢!

【问题讨论】:

  • 也许做 Power Point 演示的人不想看到你的气球...
  • 一切都可以,但你不应该尝试。这违反了 UI 标准。 - ATTN:反对让 Windows 看起来很糟糕的做法的用户。
  • 您使用的是哪种 UI 技术? Winforms?
  • 您不认为其他窗口可能会被标记为“始终在顶部”吗?如果是这种情况,您要求“始终领先”并不总是意味着“始终领先”——除非同时,您要求您自己的“始终领先” " 到 always 的意思是“始终处于领先地位”。你应该记住一个普遍的原则:你并不特别。你没有得到特殊待遇。适用于其他人的程序的相同规则也适用于您的程序。

标签: c# .net c#-4.0


【解决方案1】:

由于看起来没有办法做到这一点,这就是我所做的。这就像一个自定义的气球消息,只需将表单设置为无边框,保持较小,并设置 TopMost = true。您需要调整 WorkingArea.Right 和 WorkingArea.Bottom 以适合您的表单大小。添加了计时器以在 10 秒后自动终止表单(在我完成所有测试后会更短)我原本不想走这条路,因为我希望气球消息提供了一种方法来做到这一点 :

private void notifyUser_Load(object sender, EventArgs e)
    {
        var screen = Screen.FromPoint(this.Location);
        this.Location = new Point(screen.WorkingArea.Right - 250, screen.WorkingArea.Bottom - 85);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {

        count++;
        if (count > 10)
        {
            count = 0;
            this.Close();
        }
    }

对于每个担心用户不想看到它等的人来说,这个程序是专门为监视 Windows 中的一堆其他应用程序/设置/日志而创建的,如果有错误,他们会想知道的。 Power Points 实际上并没有在这些计算机上运行,​​这只是一个例子,所以每个人都知道我的意思。以后我会让它“更漂亮”。

【讨论】:

    【解决方案2】:

    实际上可能的。当您的应用程序(或其他应用程序)全屏运行时,它还会覆盖任务栏,因此也会覆盖系统托盘,从而防止气球出现。诀窍是在显示通知之前将焦点放在 Windows 系统托盘上。这是怎么做的。

    1. 首先您需要一些 p/invoke:
    [DllImport("user32.dll")] static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd);
    
    1. 然后是真正的技巧:
    SetForegroundWindow(FindWindow("Shell_TrayWnd", null));
    
    1. 终于收到通知了
    notifyIcon1.visible = true;
    notifyIcon1.ShowBalloonTip(5000);
    

    【讨论】:

      猜你喜欢
      • 2016-10-23
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2018-12-29
      相关资源
      最近更新 更多