【问题标题】:Minimize Microsoft Edge browser from C# not working从 C# 最小化 Microsoft Edge 浏览器不起作用
【发布时间】:2018-02-19 09:32:59
【问题描述】:

我正在尝试通过 C# 最小化 Microsoft Edge 浏览器。除 Microsoft Edge 外,其他所有浏览器(如 Chrome、Firefox、Internet Explorer)都运行良好。

谁能帮帮我。

这是我的代码。

   [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    static void Main(string[] args)
    {

        var processes = Process.GetProcessesByName("MicrosoftEdge");
        //var processes = Process.GetProcessesByName("chrome");

         foreach (var process in processes)
            ShowWindow(process.MainWindowHandle, 2);
    }

您可以尝试取消注释正在运行的 Chrome 进程。

【问题讨论】:

    标签: c# .net browser microsoft-edge


    【解决方案1】:

    这应该可以解决问题(不言自明,我提供了 cmets 以防万一):

    using System;
    using System.Runtime.InteropServices;
    using System.Text;
    
    namespace EdgeApp
    {
        class Program
        {
            [DllImport("user32.dll")]
            private static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam);
    
            [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
            private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
    
            [DllImport("user32.dll", CharSet = CharSet.Unicode)]
            private static extern int GetWindowTextLength(IntPtr hWnd);
    
            [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
            private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
    
            [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
            private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    
            public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
    
            public const int SW_HIDE = 0;
            public const int SW_SHOWNORMAL = 1;
            public const int SW_SHOWMINIMIZED = 2;
            public const int SW_SHOWMAXIMIZED = 3;
    
            public static void Main(string[] args)
            {
                // Enumerate over windows.
                EnumWindows((handle, param) =>
                {
                    // Get the class name. We are looking for ApplicationFrameWindow.
                    var className = new StringBuilder(256);
                    GetClassName(handle, className, className.Capacity);
    
                    // Get the window text. We're looking for Microsoft Edge.
                    int windowTextSize = GetWindowTextLength(handle);
                    var windowText = new StringBuilder(windowTextSize + 1);
                    GetWindowText(handle, windowText, windowText.Capacity);
    
                    // Check if we have a match. If we do, minimize that window.
                    if (className.ToString().Contains("ApplicationFrameWindow") && 
                        windowText.ToString().Contains("Microsoft Edge"))
                    {
                        ShowWindow(handle, SW_SHOWMINIMIZED);
                    }
    
                    // Return true so that we continue enumerating,
                    // in case there are multiple instances.
                    return true;
                }, IntPtr.Zero);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以轻松验证,您正在查看的进程没有主窗口。它的句柄是0。因此,您不会最小化任何东西。

      UWP 应用程序与普通的 Win32 应用程序有(或可能)有点不同。虽然 Edge 内容进程具有窗口标题,但您也无法使用该窗口句柄最小化 Edge。窗口所属的实际进程是ApplicationFrameHost。如果有多个主窗口标题,您可能需要适当地过滤它们。

      【讨论】:

      • 谢谢@Joey。如果您知道我该怎么做,请分享您的代码。
      猜你喜欢
      • 2016-01-02
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 2017-12-06
      • 2016-10-05
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多