如何在Windows 11中通过PowerShell调整Windows Terminal窗口大小?
问题描述
在Windows 11中直接启动PowerShell.exe时,窗口外观显示为Windows Terminal,但PowerShell进程的父进程实际是explorer.exe。常规调整PowerShell窗口大小的方法无法生效,例如:
$host.UI.RawUI.WindowSize = New-Object System.Management.Automation.Host.Size(80, 40)
Add-Type @" using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("user32.dll")] public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); } "@ $ThisProc = Get-Process -Id $PID [Win32]::MoveWindow($ThisProc.MainWindowHandle, 100, 100, 600, 200, $true)
需要找到定位PowerShell所属Windows Terminal窗口并调整其大小的方法。
解决方案
思路说明
直接启动的PowerShell.exe是作为Windows Terminal的一个标签页运行的,因此需要先找到当前PowerShell控制台对应的父窗口(即Windows Terminal主窗口),再对该窗口进行大小调整。
实现代码
以下PowerShell脚本可以完成定位并调整窗口大小的操作:
Add-Type @" using System; using System.Runtime.InteropServices; public class Win32 { // 获取当前控制台窗口句柄 [DllImport("kernel32.dll")] public static extern IntPtr GetConsoleWindow(); // 获取指定窗口的父窗口句柄 [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr GetParent(IntPtr hWnd); // 移动并调整窗口大小 [DllImport("user32.dll")] public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); } "@ # 获取当前控制台窗口句柄 $consoleHandle = [Win32]::GetConsoleWindow() # 获取Windows Terminal主窗口句柄(控制台窗口的父窗口) $terminalHandle = [Win32]::GetParent($consoleHandle) # 调整Terminal窗口位置和大小:参数依次为句柄、X坐标、Y坐标、宽度、高度、是否重绘 [Win32]::MoveWindow($terminalHandle, 100, 100, 800, 600, $true)
补充说明
GetConsoleWindow()用于获取当前PowerShell控制台的窗口句柄,这个句柄对应的是Terminal中的单个标签页容器。GetParent()通过控制台窗口句柄找到其父窗口,也就是Windows Terminal的主窗口。MoveWindow()的参数可以根据需求修改,其中X和Y是窗口左上角的屏幕坐标,nWidth和nHeight是窗口的宽高。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

