質問

.net(proc.mainwindowhandle)の別のプロセスのメインウィンドウにハンドルがあります。 .NET内のウィンドウを最大化するにはどうすればよいですか?

役に立ちましたか?

解決

sw_showmaximedを使用してshowwindowにピンボークを使用して、ウィンドウを最大化できます。

Pinvoke.netには、ShowWindowのエントリがあります ここ.

例えば、

// Pinvoke declaration for ShowWindow
private const int SW_SHOWMAXIMIZED = 3;

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

// Sample usage
ShowWindow(proc.MainWindowHandle, SW_SHOWMAXIMIZED);

他のヒント

使用することもできます SetWindowPlacement. 。あります 詳細情報 Pinvoke.netでそれについて。

私はこれにいくつかの問題があり、ついにそれを解決することができました。私の場合、WPFアプリケーションを最大化または最小化するために必要なWinFormアプリケーションがありました。

まず、インターエスターサービスをインポートする必要があります

using System.Runtime.InteropServices;

次に、必要なアクションの方法が必要です。

[DllImport("user32.dll")]
private static extern bool SetWindowPlacement(IntPtr hWnd, [In] ref WINDOWPLACEMENT lpwndpl);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);

次に、その名前でプロセスを確認し、ウィンドウ配置を取得してから、ウィンドウ配置を更新できます。

/// <summary>
/// WINDOWPLACEMENT showCmd - 1 for normal, 2 for minimized, 3 for maximized, 0 for hide 
/// </summary>
public static void MaximizeProcessWindow(string processName)
{ 
    foreach (Process proc in Process.GetProcesses())
    {
        if (proc.ProcessName.Equals(processName))
        {
            try
            { 
                WINDOWPLACEMENT wp = new WINDOWPLACEMENT();
                GetWindowPlacement(proc.MainWindowHandle, ref wp); 

                // Maximize window if it is in a normal state
                // You can also do the reverse by simply checking and setting 
                // the value of wp.showCmd
                if (wp.showCmd == 1)
                {
                    wp.showCmd = 3; 
                } 
                SetWindowPlacement(proc.MainWindowHandle, ref wp);                         
                break;
            }
            catch(Exception ex)
            {
                // log exception here and do something
            }
        }
    }
}

また、ウィンドウタイトルでプロセスを取得することもできます。

if (proc.MainWindowTitle.Equals(processTitle))

プロセスに応じて、アプリケーションは管理者の特権の下で実行する必要がある場合があります。これは、マニフェストファイルを追加して、次の管理者特権を追加することで実行できます。

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top