【解決方法】 Windows 11 で動作しないメモ帳のすべてのインスタンスを最小化する | C#コード

プログラミングQA


私はメモ帳の開いているすべてのインスタンスを最小化する C# コードに取り組んでいます。 このコードは Windows 10 では正常に動作しますが、同じ exe を管理者権限で実行すると、メモ帳の 1 つのインスタンス (開いている 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

タスク マネージャーの[詳細]タブを見ると、メモ帳 WINDOWS をいくつ開いていても、Notepad.exe のインスタンスは 1 つだけ、「MainWindowHandle」も 1 つしかないことがわかります。

Windows 10 では、メモ帳ウィンドウごとに Notepad.exe のインスタンスが 1 つ存在し、それぞれに独自の「MainWindowHandle」があります。

基本的に、メモ帳のすべての子ウィンドウを見つけて、それぞれを最小化するためにいくつかの作業を行う必要があります。 いいえ、.NET BCL にはそれを直接行う機能はありません。

コメント

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