从 C# 中最小化 Microsoft Edge 浏览器不起作用

Er.*_*yal 2 .net c# browser microsoft-edge

我正在尝试通过 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);
    }
Run Code Online (Sandbox Code Playgroud)

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

B.K*_*.K. 5

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

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)