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

全屏应用隐藏任务栏时如何点击按钮唤醒已运行Edge窗口而非新开实例

实现方案

你需要调用Windows原生User32 API实现窗口状态的操作,具体步骤如下:

1. 导入依赖声明

首先在你的窗口类代码中添加以下命名空间引用与Win32 API声明:

using System.Diagnostics;
using System.Runtime.InteropServices;

// 你的窗口类内部添加以下代码
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool IsIconic(IntPtr hWnd);

// 窗口状态常量
private const int SW_RESTORE = 9;
private const int SW_MAXIMIZE = 3;

2. 修正按钮点击逻辑

原代码的进程计数逻辑存在缺陷:Edge采用多进程架构,单个窗口也会生成多个msedge进程,直接按进程名计数会出现误判。调整后的完整点击逻辑如下:

private void IE_Button_Click(object sender, RoutedEventArgs e)
{
    var startEdgePath = @"你的Edge/IE路径";
    Process targetEdgeProcess = null;

    // 遍历所有msedge进程,找到带有效主窗口的进程
    foreach (var proc in Process.GetProcessesByName("msedge"))
    {
        if (proc.MainWindowHandle != IntPtr.Zero)
        {
            targetEdgeProcess = proc;
            break;
        }
    }

    // 进程已存在,直接最大化展示
    if (targetEdgeProcess != null)
    {
        IntPtr windowHwnd = targetEdgeProcess.MainWindowHandle;
        // 先恢复最小化的窗口
        if (IsIconic(windowHwnd))
        {
            ShowWindow(windowHwnd, SW_RESTORE);
        }
        // 最大化窗口
        ShowWindow(windowHwnd, SW_MAXIMIZE);
        // 将窗口提到前台
        SetForegroundWindow(windowHwnd);
        return;
    }

    // 进程不存在,新开窗口
    Process.Start(new ProcessStartInfo(startEdgePath));
}

3. 可选优化

如果需要避免匹配到用户自行打开的Edge窗口,可以在首次启动Edge时将返回的Process对象的Id存为类全局变量,后续点击按钮时优先匹配该ID的进程,匹配失败再判断是否需要新开进程,不会干扰用户自己打开的浏览器窗口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:04