最小化所有在 Windows 11 上不工作的记事本实例 | C# 代码

编程


我正在编写 C# 代码,该代码可以最小化记事本的所有打开实例。 这段代码在 Windows 10 上运行良好,但是当我以管理员权限运行同一个 exe 时,它​​只会最小化记事本的一个实例(在打开的 3.. 之外)。

我的代码如下。 任何帮助是极大的赞赏。 谢谢

我尝试过的:

C#
class Program
{
    private const int SW_SHOWNORMAL = 1;
    private const int SW_SHOWMINIMIZED = 2;
    private const int SW_SHOWMAXIMIZED = 3;

    [DllImport("user32.dll")]
    private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);

    [DllImport("user32.dll")]
    private static extern bool MinimizeWindow(System.IntPtr hwnd);

    static void Main(string[] args)
    {
        System.Diagnostics.Process thisProcess =
        System.Diagnostics.Process.GetCurrentProcess();
        System.Diagnostics.Process[] processes =
        System.Diagnostics.Process.GetProcessesByName("notepad");

        foreach (System.Diagnostics.Process process in processes)
        {
            if (process == thisProcess) 
                continue;

            System.IntPtr handle = process.MainWindowHandle;

            if (handle == System.IntPtr.Zero) 
                continue;

            IntPtr s1 = process.MainWindowHandle;
            ShowWindowAsync(s1, SW_SHOWMINIMIZED);
        }
    }
}

解决方案2

查看任务管理器的“详细信息”选项卡,您会发现无论打开多少个记事本窗口,都只有一个 Notepad.exe 实例,并且只有一个“MainWindowHandle”。

在 Windows 10 上,每个记事本窗口都会有一个 Notepad.exe 实例,每个实例都有自己的“MainWindowHandle”。

基本上,您必须做一些工作才能找到记事本的所有子窗口并最小化每个子窗口。 不,.NET BCL 中没有任何东西可以直接为您执行此操作。

コメント

タイトルとURLをコピーしました