Öffnen Sie Firefox mit der PowerShell

944
daniel gon

Ich führe zwei Skripte aus.

. C:\path/Set-Window.ps1 Start-Process -FilePath 'C:/Program Files/Mozilla Firefox/firefox.exe' -ArgumentList https://stackoverflow.com Start-Sleep -Seconds 0 Set-Window -ProcessName firefox -x 194 -y 18 -Width 1180 -Height 715 -Passthru 

Wenn Set-Window.ps1 ist:

Function Set-Window { <# .SYNOPSIS Sets the window size (height,width) and coordinates (x,y) of a process window.  .DESCRIPTION Sets the window size (height,width) and coordinates (x,y) of a process window.  .PARAMETER ProcessName Name of the process to determine the window characteristics  .PARAMETER X Set the position of the window in pixels from the top.  .PARAMETER Y Set the position of the window in pixels from the left.  .PARAMETER Width Set the width of the window.  .PARAMETER Height Set the height of the window.  .PARAMETER Passthru Display the output object of the window.  .NOTES Name: Set-Window Author: Boe Prox Version History 1.0//Boe Prox - 11/24/2015 - Initial build 1.1//JosefZ (https://superuser.com/users/376602/josefz) - 19.05.2018 - treats more process instances of supplied process name properly  .OUTPUT System.Automation.WindowInfo  .EXAMPLE Get-Process powershell | Set-Window -X 2040 -Y 142 -Passthru  ProcessName Size TopLeft BottomRight ----------- ---- ------- ----------- powershell 1262,642 2040,142 3302,784   Description ----------- Set the coordinates on the window for the process PowerShell.exe  #> [OutputType('System.Automation.WindowInfo')] [cmdletbinding()] Param ( [parameter(ValueFromPipelineByPropertyName=$True)] $ProcessName, [int]$X, [int]$Y, [int]$Width, [int]$Height, [switch]$Passthru ) Begin { Try{ [void][Window] } Catch { Add-Type @" using System; using System.Runtime.InteropServices; public class Window { [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);  [DllImport("User32.dll")] public extern static bool MoveWindow(IntPtr handle, int x, int y, int width, int height, bool redraw); } public struct RECT { public int Left; // x position of upper-left corner public int Top; // y position of upper-left corner public int Right; // x position of lower-right corner public int Bottom; // y position of lower-right corner } "@ } } Process { $Rectangle = New-Object RECT $Handles = (Get-Process -Name $ProcessName).MainWindowHandle ### 1.1//JosefZ foreach ( $Handle in $Handles ) { ### 1.1//JosefZ if ( $Handle -eq [System.IntPtr]::Zero ) { Continue } ### 1.1//JosefZ $Return = [Window]::GetWindowRect($Handle,[ref]$Rectangle) If (-NOT $PSBoundParameters.ContainsKey('Width')) {  $Width = $Rectangle.Right - $Rectangle.Left  } If (-NOT $PSBoundParameters.ContainsKey('Height')) { $Height = $Rectangle.Bottom - $Rectangle.Top } If ($Return) { $Return = [Window]::MoveWindow($Handle, $x, $y, $Width, $Height,$True) } If ($PSBoundParameters.ContainsKey('Passthru')) { $Rectangle = New-Object RECT $Return = [Window]::GetWindowRect($Handle,[ref]$Rectangle) If ($Return) { $Height = $Rectangle.Bottom - $Rectangle.Top $Width = $Rectangle.Right - $Rectangle.Left $Size = New-Object System.Management.Automation.Host.Size -ArgumentList $Width, $Height $TopLeft = New-Object System.Management.Automation.Host.Coordinates -ArgumentList $Rectangle.Left, $Rectangle.Top $BottomRight = New-Object System.Management.Automation.Host.Coordinates -ArgumentList $Rectangle.Right, $Rectangle.Bottom If ($Rectangle.Top -lt 0 -AND $Rectangle.LEft -lt 0) { Write-Warning "Window is minimized! Coordinates will not be accurate." } $Object = [pscustomobject]@{ ProcessName = $ProcessName Size = $Size TopLeft = $TopLeft BottomRight = $BottomRight } $Object.PSTypeNames.insert(0,'System.Automation.WindowInfo') $Object  } } } } } 

All dies, um Firefox an einer bestimmten Position auf dem Bildschirm zu öffnen. Ich möchte aber auch, dass es sich über allen anderen Fenstern öffnet, die ich zur Zeit der Ausführung habe.

Was kann ich zu den Skripten hinzufügen, damit dies funktioniert?

0
Dies geschieht standardmäßig, da das Starten eines neuen Prozesses, insbesondere einer .exe, immer das aktive Fenster ist. Wenn das für Sie nicht passiert, hört sich das sehr seltsam an. Was ist Ihr Ziel / Anwendungsfall für diese Art von Dingen, da Sie sagen, dass Sie sich in einer vollständigen interaktiven Desktopsitzung befinden, im Gegensatz zum direkten Starten von FF? postanote vor 5 Jahren 0

0 Antworten auf die Frage