Tôi đang cố gắng sử dụng tập lệnh được đưa ra trong câu trả lời này Đặt kích thước và vị trí cửa sổ trong PowerShell 5 và 6
để đặt chiều cao và kích thước của nhiều cửa sổ windows explorer. Không phải trình thám hiểm internet .. trình duyệt tệp có tên 'explorer'.
nó hoạt động với chương trình 'notepad'. nhưng không phải với chương trình 'thám hiểm'.
#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
lý tưởng nhất là tôi muốn có một kịch bản:
- mở 3 cửa sổ thám hiểm.
- điều hướng đến filepath A, B, C
- Thay đổi kích thước mỗi cửa sổ thành một vị trí cụ thể trên màn hình
Làm thế nào tôi có thể làm điều này mà không cần cài đặt bất kỳ phần mềm bổ sung nào và chỉ sử dụng quyền hạn thô tại đây?
EDIT: Sau khi sử dụng đề xuất của harrymc, tôi đã giải quyết được một nửa vấn đề .. Tôi có thể di chuyển cửa sổ nhưng tôi chỉ cần tìm ra cách xử lý 3 tiến trình thám hiểm con ...
$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)
Chỉnh sửa 2:
Tôi đã thử nhận cửa sổ explorer thông qua chức năng Start-Process nhưng tôi gặp lỗi:
$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
nó nói rằng nó đã thoát ... nhưng cửa sổ filebrowser explorer vẫn mở ... không chắc chuyện gì đang xảy ra ở đây. Nếu tôi thử bằng notepad thì nó hoạt động ...
$er4 = (Start-Process notepad -passthru)
PS C:\> (Get-Process -Id $er4.Id).MainWindowHandle
9899994
Chỉnh sửa 3: Tôi đã tìm ra nó bằng cách sử dụng ComObject và truy cập mục (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")