You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现仅当Form未获焦点/未激活时显示通知窗口?

当然可以实现这个需求!针对WinForms场景,我给你几种靠谱的方案,完全贴合你预想的逻辑思路:

方案一:直接利用窗体的激活状态属性判断

你预想的!form.Active思路本身是可行的,在WinForms里可以通过几个属性组合来精准判断当前窗体是否未激活/失焦:

// 假设你的主窗体实例是mainForm,通知窗口是NotificationForm
if (mainForm.ActiveForm != mainForm || !mainForm.Focused)
{
    // 创建并显示通知窗口
    using (var notifyForm = new NotificationForm())
    {
        // 可选:设置通知窗口置顶但不抢占焦点
        notifyForm.TopMost = true;
        notifyForm.ShowWithoutActivation = true;
        notifyForm.Show();
    }
}

其中:

  • ActiveForm获取当前应用的活动窗体,判断是否是目标主窗体
  • Focused直接判断目标窗体是否拥有焦点
  • 结合两者可以覆盖“窗体未激活”的所有场景
方案二:监听窗体失活事件自动触发

如果需要在窗体从激活状态切换到未激活时自动弹出通知,可以注册Form.Deactivate事件:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        // 注册窗体失活事件
        this.Deactivate += MainForm_Deactivate;
    }

    private void MainForm_Deactivate(object sender, EventArgs e)
    {
        // 窗体失活时显示通知
        ShowNotification();
    }

    private void ShowNotification()
    {
        var notifyForm = new NotificationForm();
        // 让通知窗口不抢占焦点
        notifyForm.ShowWithoutActivation = true;
        notifyForm.TopMost = true;
        notifyForm.Show();
    }
}

为了让通知窗口不抢走其他应用的焦点,需要在NotificationForm里重写属性:

public class NotificationForm : Form
{
    protected override bool ShowWithoutActivation
    {
        get { return true; }
    }
}
方案三:全局判断应用是否失焦(多窗体场景)

如果你的应用有多个子窗体,需要判断整个应用都没有焦点时才显示通知,可以借助Windows API实现:

using System.Runtime.InteropServices;

[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();

private bool IsCurrentAppActive()
{
    IntPtr foregroundWindow = GetForegroundWindow();
    // 遍历应用所有打开的窗体,检查是否有一个是前台窗口
    foreach (Form form in Application.OpenForms)
    {
        if (form.Handle == foregroundWindow)
        {
            return true;
        }
    }
    return false;
}

// 使用示例
if (!IsCurrentAppActive())
{
    ShowNotification();
}

这个方法可以确保只有当用户完全不在你的应用内操作时,才会弹出通知,适合多窗体复杂场景。

内容的提问来源于stack exchange,提问作者lozadakb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:39:00