我在C#中有一个气球弹出窗口(来自notifyIcon)完美无缺,除非用户监视器上有全屏应用程序,例如功率点演示。在这种情况下,弹出窗口根本不显示。但是,一旦该应用程序退出或最小化(或任务栏被置于前面),您可以再次看到气球弹出窗口。
有没有办法在所有窗口上显示此弹出窗口?某种形式的“最顶级”设置?如果有人需要,我的气球代码如下。
notifyIcon1.BalloonTipText = "Issue found!";
notifyIcon1.ShowBalloonTip(5000);
谢谢!
答案 0 :(得分:1)
它实际上是可能的。当您的应用程序(或其他应用程序)全屏运行时,它还会覆盖任务栏和系统托盘,从而防止出现气球。诀窍是在显示通知之前将焦点放在 Windows 系统托盘上。这是如何做到的。
[DllImport("user32.dll")] static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd);
SetForegroundWindow(FindWindow("Shell_TrayWnd", null));
notifyIcon1.visible = true;
notifyIcon1.ShowBalloonTip(5000);
答案 1 :(得分:0)
因为它看起来没有办法实现,所以这就是我做的事情。它就像一个自定义的气球消息,只是设置没有边框的表单,保持小,并设置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 Point实际上并不在这些计算机上运行,这只是一个例子,所以每个人都知道我的意思。我会让它变得更漂亮"后面。