You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过简易方法定位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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:32:35