Múltiplas janelas do explorador com posicionamento e tamanho.
Devido ao meu trabalho, necessito de ter muitas janelas do explorador abertas e distribuídas por um ecrã. Esta era uma tarefa bastante cansativa para todas as vezes que ligava o computador.
Decidi criar um script em powershell para resolver esta questão e abrir múltiplas janelas de explorador e distribuir pelo ecrã.
Isto porque como são janelas com localizações de rede, davam erro quando abriam pois ainda não tinha acesso a essas localizações quando arrancava o Windows. Desta forma posso correr o script quando necessitar e a qualquer altura.
Criem um ficheiro com a extensão .ps1 que corresponde a código de Powershell.
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Win {
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
}
"@
# Define the array with folder locations and window properties (Top, Left, Width, Height)
$windows = @(
@{Location="C:\"; Top=0; Left=100; Width=800; Height=600},
@{Location="D:\"; Top=200; Left=300; Width=800; Height=600},
@{Location="E:\"; Top=300; Left=500; Width=800; Height=600}
)
# Create the Shell.Application COM object
$shell = New-Object -ComObject Shell.Application
# Loop through each location and its window properties
foreach ($window in $windows) {
# Open the folder
$shell.Open($window.Location)
# Wait briefly to ensure the window has opened
Start-Sleep -Seconds 2
# Get the collection of open windows from the Shell.Application object
$openWindows = $shell.Windows()
# Loop through each open window and check for the correct folder path
foreach ($explorerWindow in $openWindows) {
try {
if ($explorerWindow.Document.Folder.Self.Path -eq $window.Location) {
# Get the handle (hWnd) of the Explorer window
$hWnd = $explorerWindow.HWND
# Move and resize the window
[Win]::MoveWindow($hWnd, $window.Left, $window.Top, $window.Width, $window.Height, $true)
Write-Host "Moved window for $($window.Location) to position [$($window.Left), $($window.Top)] with size [$($window.Width)x$($window.Height)]"
break
}
} catch {
# If there's an error accessing the Document or Folder, skip this window
Write-Host "Error accessing window for $($window.Location). Skipping..."
}
}
}
Desta forma posso adicionar e remover janelas de explorador e escolher qual a localização e tamanho no ecrã de cada janela. Para isso basta mudar a array com as localizações das janelas:
$windows = @(
@{Location="C:\"; Top=0; Left=100; Width=800; Height=600},
@{Location="D:\"; Top=200; Left=300; Width=800; Height=600},
@{Location="E:\"; Top=300; Left=500; Width=800; Height=600}
)
Como exemplo da primeira localização, vai abrir uma janela em “C:\” na posição de topo 0 e a 100px da margem esquerda. A janela vai ter o tamanho de 800px de largura e 600px de altura.
Podem mudar esta array para as vossas necessidades.
O código deste script de powershell está disponível no GitHub
Espero ter ajudado.
Pode fazer uma doação para ajudar a mater o site, Obrigado!