Ist es möglich, mit Powershell ein Programm zu entwickeln, das mit einer bestimmten Fenstergröße und Position startet?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Mit Powershell ist das unter Ausnutzung der nativen Systemfunktion MoveWindow relativ einfach:

$u32 = Add-Type -m '[DllImport("User32.dll")] public extern static bool MoveWindow(IntPtr Hwnd, int x, int y, int width, int height, bool redraw);' -Name user32 -passthru

$ProcessData = Start-Process 'Notepad' -passthru #starte Prozess Notepad
sleep 1 #warte 1 Sekunde bis Fenster aufgebaut ist (ein FensterHandle Hwnd gibts erst, wenn das Fenster existiert)
$u32::MoveWindow($ProcessData.MainWindowHandle,30,30,200,200,$true) #verschiebe/resize Fenster

Manche Programme brauchen relativ lange zum starten. In solchen Fällen musst Du die Wartezeit bis zum Ausführen des Verschiebebefehls entsprechend verlängern.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = 'Data Entry Form'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'

Du kannst mit PowerShell Forms erstellen und diese auch entsprechend verwalten und ändern. Siehe dazu auch:

https://learn.microsoft.com/de-de/powershell/scripting/samples/creating-a-custom-input-box?view=powershell-7.3

Ich weiss nicht genau, was du da mit der PowerShell tatsächlich vor hast.
Für umfangreiche Programme mit grafischer Oberfläche ist das nicht vorgesehen, sondern vielmehr für Scripts, die dem Nutzer Shell-Aufgaben erleichtern sollen.

Um die Fensterposition und -grösse von Anwendungen zu bestimmen, sollte man hier vielmehr - wo es die Softwarehersteller vorgesehen haben - auf die verfügbaren Startparameter der Anwendungen zurückgreifen. Ansonsten bleibt nur die Option, die zuletzt im Betriebssystem gespeicherten Positions- und Grössenangaben der Anwendungen auf die benötigten Werte zu verändern.


Erzesel  13.01.2023, 18:11

Wenn sich ein Fenster manuell verschieben/resizen lässt, so kann man dies auch problemlos per Programm/Script tun.

Windows bietet in der Systembibliothek "user32.dll einige recht interessante Funktionen zum Fensterhandling. MoveWindow bedient die gleichen Mechanismen, als würde man das Fenster mit der Maus verschieben. Insofern dürfte es keine Probleme hinsichtlich der Kompatibilität geben.

1

Du kannst Windows-API-Funktionen SetWindowPos und SetWindowPlacement verwenden, um die Größe und Position des Programmfensters zu ändern.