Maximizar la ventana de otro proceso en .NET

Tengo un control en la ventana principal de otro proceso en .net (proc.MainWindowHandle). ¿Cómo maximizo la ventana dentro de .net?

Puede pinvokear a ShowWindow con SW_SHOWMAXIMIZED para maximizar la ventana.

Pinvoke.net tiene una entrada para ShowWindow aquí .

Por ejemplo,

// 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); 

También podría usar SetWindowPlacement . Hay más información al respecto en Pinvoke.net.

Tuve algunos problemas con esto y finalmente logré resolverlo. En mi caso, tenía una aplicación WinForm que necesitaba maximizar o minimizar una aplicación WPF.

En primer lugar, tenemos que importar InteropServices

 using System.Runtime.InteropServices; 

Entonces necesitamos métodos para las acciones que requerimos:

 [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); 

A continuación, podemos verificar el proceso por su nombre, obtener su ubicación de ventana y luego actualizar su ubicación de ventana:

 ///  /// WINDOWPLACEMENT showCmd - 1 for normal, 2 for minimized, 3 for maximized, 0 for hide ///  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 } } } } 

También puede obtener el proceso por el título de la ventana:

 if (proc.MainWindowTitle.Equals(processTitle)) 

Según el proceso, es posible que su aplicación deba ejecutarse bajo privilegios de administrador. Esto se puede hacer agregando un archivo de manifiesto y luego agregando el siguiente privilegio de administrador: