C#气球通知弹出所有其他应用程序

时间:2014-06-10 21:21:20

标签: c# .net c#-4.0

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

有没有办法在所有窗口上显示此弹出窗口?某种形式的“最顶级”设置?如果有人需要,我的气球代码如下。

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

谢谢!

2 个答案:

答案 0 :(得分:1)

它实际上是可能的。当您的应用程序(或其他应用程序)全屏运行时,它还会覆盖任务栏和系统托盘,从而防止出现气球。诀窍是在显示通知之前将焦点放在 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);

答案 1 :(得分:0)

因为它看起来没有办法实现,所以这就是我做的事情。它就像一个自定义的气球消息,只是设置没有边框的表单,保持小,并设置TopMost = true。您需要调整WorkingArea.Right和WorkingArea.Bottom以适合您的表单大小。添加了计时器以在10秒后自动终止表单(在我测试完所有内容后会更短)我原本不想去这条路线,因为我希望气球消息提供了一种方法此enter image description here

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 Point实际上并不在这些计算机上运行,​​这只是一个例子,所以每个人都知道我的意思。我会让它变得更漂亮"后面。