我发现solutions可以编程地定位窗口。甚至还有my question (similar, not exact match)。docs for Invoke-Item中没有任何关于它的说明。我不喜欢高级的解决方案,因为它的复杂性(希望是由于通用性和更高的代码标准)。我正在寻找一个懒人的解决方案(可能有相同的警告和限制)。
我有一个脚本,它循环遍历字符串数组,并尝试为找到的每个路径打开一个窗口。我知道屏幕的大小。我不需要确保可扩展性,也不需要插入到其他系统。“在我的机器上工作”在这种情况下是完全可持续的。
$BaseDir = "C:\Blaha"
$SubDirs = @("monkey", "donkey", "wonkey")
foreach($Dir in $SubDirs){
$TargetDir = Join-Path $BaseDir $Dir
if(Test-Path $TargetDir) { Invoke-Item($TargetDir) }
}
我希望能够为Invoke-Item
语句打开的每个窗口指定一个固定位置。在这个阶段,我很高兴,如果每个这样的是在同一位置打开,说在150px从顶部和230px从左边。
这可行吗
2条答案
按热度按时间wvt8vs2t1#
是否有一个“简单”的方法,答案是不,没有。
有非常复杂的方法来实现它,你可以让他们在大多数时间工作。JosefZ的答案是复杂方法之一的一个例子。
请参阅,在窗口控件所在位置创建窗口控件的应用程序。这些应用程序允许用户移动窗口并调整它们的大小,它们还可以根据活动屏幕,屏幕大小,其他窗口的位置以及过去使用窗口的历史来自动定位。
因此,除非应用程序提供了一种机制,通过命令行或配置文件给予窗口位置,否则您将面临一些复杂的解决方案。一般而言,这些措施包括:
毕竟,它可能会工作。或者,应用程序将只是将窗口移回它之后的位置。
对于explorer.exe,不会启动新应用程序。行为可能会有所不同,并且可能会重用现有窗口。
底线是,这很少是值得付出的努力,并且推回这个需求将是您应该尝试的第一件事。
unguejic2#
脚本(需要大大改进的函数
Set-Window
,* 附在下面 *)在一个新的浏览器窗口中打开每个 * 子目录 *,并将每个下一个窗口向右和向下移动40像素(调整大小只是为了使屏幕截图清晰):结果:
D:\PShell\SO\76193105.ps1
重要:改进的脚本
Set-Window.ps1
:说明
假设文件系统文件夹的默认应用程序是Windows default
explorer.exe
,Invoke-Item
是不够的:如果我不加修改地运行你的脚本,那么所有新打开的窗口都会被 * 程序管理器进程 * 阻塞(另见第一个快照):运行提供的脚本
SO\76193105.ps1
(使用Start-Process
而不是Invoke-Item
)后:我们可以看到每个窗口都是在一个独立的进程中打开的:
注意:
"^$Dir$|^$([regex]::Escape($TargetDir))$"
正则表达式包含两种可能的标题栏值:leaf only 或 full path: