Я пытаюсь использовать скрипт, приведенный в этом ответе. Установка размера и положения окна в PowerShell 5 и 6.
установить высоту и размер окон Windows 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
в идеале я хотел бы иметь скрипт:
- откройте 3 окна проводника.
- перейти к пути к файлу A, B, C
- изменить размер каждого окна в определенном месте на экране
Как я могу сделать это без установки какого-либо дополнительного программного обеспечения и просто использовать raw powershell здесь?
РЕДАКТИРОВАТЬ: После использования предложения Harrymc, я прошел половину проблемы ... Я могу переместить окно, но мне просто нужно выяснить, как получить дескриптор 3 дочерних процессов проводника ...
$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)
Изменить 2:
Я попытался получить окно обозревателя с помощью функции Start-Process, но я получаю сообщение об ошибке:
$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
он говорит, что вышел ... но окно обозревателя файлов остается открытым ... не уверен, что здесь происходит. Если я попробую это с помощью блокнота, это сработает ...
$er4 = (Start-Process notepad -passthru)
PS C:\> (Get-Process -Id $er4.Id).MainWindowHandle
9899994
Редактировать 3: я понял это с помощью ComObject и доступа к элементу (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")