Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#气球通知弹出窗口覆盖所有其他应用程序_C#_.net_C# 4.0 - Fatal编程技术网

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

C#气球通知弹出窗口覆盖所有其他应用程序,c#,.net,c#-4.0,C#,.net,C# 4.0,我在C#中有一个气球式弹出窗口(来自notifyIcon),它工作得非常好,除非在用户监视器上有一个全屏应用程序,比如power point演示。在这种情况下,弹出窗口根本不显示。但是,一旦该应用程序退出或最小化(或任务栏置于前面),您就可以再次看到气球弹出窗口 有没有办法让这个弹出窗口显示在所有窗口上?类似于表单的“最顶层”设置?如果有人需要,我的气球代码如下 notifyIcon1.BalloonTipText = "Issue found!"; notifyIcon1.ShowBalloo

我在C#中有一个气球式弹出窗口(来自notifyIcon),它工作得非常好,除非在用户监视器上有一个全屏应用程序,比如power point演示。在这种情况下,弹出窗口根本不显示。但是,一旦该应用程序退出或最小化(或任务栏置于前面),您就可以再次看到气球弹出窗口

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

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

谢谢大家!

既然看起来没有办法做到这一点,下面是我所做的。它就像一个自定义的气球消息,只需将表单设置为无边框,保持较小,并将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并不是在这些计算机上运行的,这只是一个例子,所以每个人都知道我的意思。我以后会把它弄得“更漂亮”的。

这实际上是可能的。当您的应用程序(或其他应用程序)全屏运行时,它也会覆盖任务栏,从而覆盖系统托盘,从而防止气泡显示。诀窍是在显示通知之前将焦点放在Windows系统托盘上。下面是如何做到这一点

  • 首先,您需要一些p/invoke:
  • 然后是实际的技巧:
  • 最后是你的通知

  • 也许做Power Point演示的人不想看到你的气球…一切都可以做到,但你不应该尝试。这是违反用户界面标准的收件人:一个反对让windows看起来很糟糕的做法的用户。你在使用哪种UI技术
    Winforms
    ?可能重复您不认为其他窗口可能会标记为“始终在顶部”吗?如果是这样的话,你要求的“始终在顶部”并不总是意味着“始终在顶部”——除了同时,你要求自己的“始终在顶部”总是意味着“始终在顶部”。你应该记住一个基本原则:你并不特别。你没有得到特殊待遇。适用于其他人的程序的规则同样适用于您的程序。
    [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);