如何通过简易方法定位PowerShell中Invoke-Item打开的窗口?
懒人方案:固定资源管理器窗口打开位置
可行,Invoke-Item本身确实不支持直接指定窗口位置,但可以用更可控的方式实现你的需求,代码改动极小且完全符合你“仅本机可用”的懒人要求:
修改后的脚本
# 引入Windows API用于设置窗口位置(仅需执行一次) Add-Type @" using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("user32.dll")] public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); } "@ $BaseDir = "C:\Blaha" $SubDirs = @("monkey", "donkey", "wonkey") # 自定义窗口位置:左侧230px,顶部150px $targetX = 230 $targetY = 150 # API参数:仅修改位置,不改变窗口大小和层级 $SWP_NOSIZE = 0x0001 $SWP_NOZORDER = 0x0004 foreach($Dir in $SubDirs){ $TargetDir = Join-Path $BaseDir $Dir if(Test-Path $TargetDir) { # 启动资源管理器并获取进程对象 $explorerProc = Start-Process explorer.exe -ArgumentList $TargetDir -PassThru # 短延时确保窗口已创建(本机使用无需调整,按需微调毫秒数) Start-Sleep -Milliseconds 300 # 定位窗口到指定位置 [Win32]::SetWindowPos($explorerProc.MainWindowHandle, [IntPtr]::Zero, $targetX, $targetY, 0, 0, $SWP_NOSIZE -bor $SWP_NOZORDER) } }
关键说明
- 无需依赖外部脚本(比如Set-Window.ps1),所有逻辑内嵌在脚本中
Start-Sleep的延时是给系统留出创建窗口的时间,本机使用300毫秒足够- 通过Windows API的
SetWindowPos仅调整窗口位置,保留默认的窗口大小和显示层级 - 完全满足你“仅在本机可用”的需求,不需要考虑跨系统适配
内容的提问来源于stack exchange,提问作者Konrad Viltersten
相关产品推荐
相关产品推荐

