Sto cercando di utilizzare lo script fornito in questa risposta Impostazione della dimensione e della posizione della finestra in PowerShell 5 e 6
per impostare l'altezza e le dimensioni di più finestre di Windows Explorer. Non l'esploratore di Internet ... il browser di file chiamato "explorer".
funziona con il programma 'notepad'. ma non con il programma "explorer".
#works
Set-Window -ProcessName notepad-X 400 -Y 400 -Width 400 -Height 700
#doesnt work
Set-Window -ProcessName explorer -X 400 -Y 400 -Width 400 -Height 700
idealmente mi piacerebbe avere una sceneggiatura:
- apri 3 finestre di esplorazione.
- passare al percorso file A, B, C
- ridimensiona ogni finestra in una posizione specifica sullo schermo
Come posso farlo senza installare alcun software aggiuntivo e usare solo raw PowerShell qui?
EDIT: Dopo aver usato il suggerimento di harrymc, sono riuscito a metà del problema .. Posso spostare la finestra ma devo solo capire come ottenere la gestione dei processi figlio di 3 explorer ...
$MethodDefinition = @'
[DllImport("user32.dll")]
public extern static bool MoveWindow(IntPtr handle, int x, int y, int width, int height, bool redraw);
'@
$Kernel32 = Add-Type -MemberDefinition $MethodDefinition -Name 'Kernel32' -Namespace 'Win32' -PassThru
# How do I get 3 child explorer IDs here?
# i can't pass in 'explorer' name because that references the parent process running the whole GUI
$Handle = (Get-Process -Name "notepad").MainWindowHandle
$Return = [Window]::MoveWindow($Handle, 10, 20, 400, 400,$True)
Modifica 2:
Ho provato a ottenere la finestra di Explorer tramite la funzione Start-Process ma sto ricevendo un errore:
$er3 = (Start-Process explorer -passthru)
PS C:\> (Get-Process -Id $er3.Id).MainWindowHandle
Get-Process : Cannot find a process with the process identifier 10572.At line:1 char:2
+ (Get-Process -Id $er3.Id).MainWindowHandle
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (10572:Int32) [Get-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenId,Microsoft.PowerShell.Commands.GetProcessCommand
dice che è uscito ... ma la finestra di Esplora file rimane aperta ... non sono sicuro di cosa stia succedendo qui. Se lo provo con il blocco note funziona ...
$er4 = (Start-Process notepad -passthru)
PS C:\> (Get-Process -Id $er4.Id).MainWindowHandle
9899994
Modifica 3: l'ho capito usando ComObject e accedendo all'elemento (0).
$ex4 = New-Object -ComObject Shell.Application
$ex4.open("C:\")
# $ex4.windows()[0].Width = 400 # breaks
$ex5 = $ex4.Windows()[0]
$ex6 = $ex5.Item(0) # not sure why i need to do this extra step
$ex6.Width = 400
$ex6.Navigate("file:///C:/Folder1/Folder2")