最大化另一个 运行 程序的 window

Maximize window of another running program

如何以编程方式最大化我电脑上当前 运行 的程序。例如,如果我在任务管理器中有 WINWORD.exe 运行。如何最大化它?

在我的代码中我已经尝试过:

private void button1_Click(object sender, EventArgs e)
{
    this.WindowState = FormWindowState.Maximised;
}

不幸的是,它只显示了我的应用程序。我希望它最大化另一个 exe,但如果它找不到它,那么我想让它退出。

使用 ShowWindow

您可以使用ShowWindow 方法设置windows 状态。为此,您首先需要找到 window 句柄,然后使用该方法。然后最大化 window 这样:

private const int SW_MAXIMIZE = 3;
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private void button1_Click(object sender, EventArgs e)
{
    var p = System.Diagnostics.Process.GetProcessesByName("WINWORD").FirstOrDefault();
    if(p!=null)
    {
        ShowWindow(p.MainWindowHandle, SW_MAXIMIZE);
    }
}

使用WindowPattern.SetWindowVisualState

还有另一种选择(基于 Hans 的评论),您可以使用 SetWindowVisualState 方法来设置 window 的状态。为此,首先添加对 UIAutomationClient.dllUIAutomationTypes.dll 的引用,然后添加 using System.Windows.Automation; 并以这种方式最大化 window:

var p = System.Diagnostics.Process.GetProcessesByName("WINWORD").FirstOrDefault();
if (p != null)
{
    var element = AutomationElement.FromHandle(p.MainWindowHandle);
    if (element != null)
    {
        var pattern = element.GetCurrentPattern(WindowPattern.Pattern) as WindowPattern;
        if (pattern != null)
            pattern.SetWindowVisualState(WindowVisualState.Maximized);
    }
}