0

J'utilise la fonction de Définition de la taille et de la position de la fenêtre dans PowerShell 5 et 6, qui fonctionne très bien pour une seule application, mais je dois par exemple avoir 3 fenêtres CMD ouvertes et chaque fois que je les appelle, je les place sur un nouvel emplacement. Au lieu de prendre la nouvelle fenêtre cmd à cet emplacement, elle prend la nouvelle, plus les autres fenêtres cmd et se déplace vers l'emplacement spécifié.

Est-il possible de créer le script pour pointer vers l'ID de processus le plus récent?

Voici la fonction Script:

        Fonction Set-Window {

    [OutputType('System.Automation.WindowInfo')]
    [cmdletbinding()]
    
    Param (
        [parameter(ValueFromPipelineByPropertyName=$True)]
        $ ProcessName,
        [int]$ X,
        [int]$ Y,
        [int]Largeur $
        [int]$ Hauteur,
        [switch]$ Passthru
    )
    Commencer {
        Essayer{
            [void][Window]
        
        } Capture {
        Add-Type @ "
              en utilisant le système;
              en utilisant System.Runtime.InteropServices;
              Fenêtre de classe publique {
                [DllImport("user32.dll")]
                [return: MarshalAs(UnmanagedType.Bool)]
                
                public statique externe bool GetWindowRect (IntPtr hWnd, out RECT lpRect);

                [DllImport("User32.dll")]
                public extern static bool MoveWindow (handle IntPtr, int x, int y, int width, int height, bool redraw);
              }
              structure publique RECT
              {
                public int Gauche // x position du coin supérieur gauche
                public int Top; // y position du coin supérieur gauche
                public int Droit; // x position du coin inférieur droit
                public int Bottom; // y position du coin inférieur droit
              }
"@


 }
}
Processus {
        $ Rectangle = Nouvel objet RECT
        $ Handles = (Get-Process -Name $ ProcessName) .MainWindowHandle
        foreach ($ Handle in $ Handles) {
            if ($ Handle -eq [System.IntPtr]:: Zero) {Continuer}
            $ Retour = [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
            }
            Si ($ Retour) {
                $ Retour = [Window]:: MoveWindow ($ Handle, $ x, $ y, $ Width, $ Height, $ True)
            }
            If ($ PSBoundParameters.ContainsKey ('Passthru')) {
                $ Rectangle = Nouvel objet RECT
                $ Retour = [Window]:: GetWindowRect ($ Handle,[ref]$ Rectangle)
                Si ($ Retour) {
                    $ Height = $ Rectangle.Bottom - $ Rectangle.Top
                    $ Width = $ Rectangle.Right - $ Rectangle.Left
                    $ Size = Nouvel objet System.Management.Automation.Host.Size -ArgumentList $ Largeur, $ Hauteur
                    $ TopLeft = Nouvel objet System.Management.Automation.Host.Coordinates -ArgumentList $ Rectangle.Left, $ Rectangle.Top
                    $ BottomRight = Nouvel objet System.Management.Automation.Host.Coordinates -ArgumentList $ Rectangle.Right, $ Rectangle.Bottom
                    Si ($ Rectangle.Top -lt 0 -AND $ Rectangle.LEft -lt 0) {
                        Avertissement d'écriture "La fenêtre est réduite! Les coordonnées ne seront pas exactes."
                    }
                    $ Object = [pscustomobject]@ {
                        ProcessName = $ ProcessName
                        Taille = Taille $
                        TopLeft = $ TopLeft
                        BottomRight = $ BottomRight
                    }
                    $ Object.PSTypeNames.insert (0, 'System.Automation.WindowInfo')
                    $ Objet
                }
            }
        }
    }
}

Voici comment l'appeler:

Set-Window -ProcessName cmd -x 1 -y 1 -Width 615 -Height 345 -Passthru