Frage

Ich habe einen Griff für ein anderes Hauptfenster in .NET (proc.mainwindowHandle). Wie maximiere ich das Fenster innerhalb von .NET?

War es hilfreich?

Lösung

Sie können mit sw_showmaximized zum Showwindow streichen, um das Fenster zu maximieren.

Pinvoke.net hat einen Eintrag für ShowWindow hier.

Zum Beispiel,

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

Andere Tipps

Sie könnten auch verwenden SetWindowplacement. Es gibt weitere Infos darüber auf Pinvoke.net.

Ich hatte einige Probleme damit und schaffte es schließlich, es zu lösen. In meinem Fall hatte ich eine Winform -Anwendung, die eine WPF -Anwendung maximiert oder minimiert musste.

Zunächst müssen wir Interopices importieren

using System.Runtime.InteropServices;

Dann brauchen wir Methoden für die Aktionen, die wir benötigen:

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

Als nächstes können wir den Vorgang mit seinem Namen überprüfen, seine Fensterplatzierung abrufen und dann seine Fensterplatzierung aktualisieren:

/// <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
            }
        }
    }
}

Sie können den Vorgang auch durch den Fenstertitel erhalten:

if (proc.MainWindowTitle.Equals(processTitle))

Abhängig vom Prozess muss Ihre Anwendung möglicherweise unter Administratorrechten ausgeführt werden. Dies kann durch Hinzufügen einer Manifestdatei und dann durch Hinzufügen der folgenden Administratorberechtigungen erfolgen:

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top