Maximieren Sie ein anderes Prozess 'Fenster in .net
-
14-10-2019 - |
Frage
Ich habe einen Griff für ein anderes Hauptfenster in .NET (proc.mainwindowHandle). Wie maximiere ich das Fenster innerhalb von .NET?
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" />