我想列出所有打开的Windows资源管理器窗口及其活动路径ListBox.ListBox如果浏览器窗口导航到其他路径,应用程序应刷新.
例如,两个浏览器窗口是打开的.一个导航到C:\Windows另一个导航到另一个导航D:\Stuff.当应用程序运行它,它增加C:\Windows和D:\Stuff到ListBox.然后,用户导航到其中一个打开的资源管理器窗口中的其他文件夹C:\Windows\system32.然后应用程序应刷新ListBox和列表C:\Windows\system32,D:\Stuff而不是.
我对如何做到这一点没有任何想法.任何指针将不胜感激.
这个问题显示了一个 Powershell 脚本来生成一个打开的文件资源管理器窗口及其路径的列表。我的目标是捕获当前打开的一组资源管理器窗口,并使用以下命令写出一个 CMD 文件:C:\WINDOWS\explorer.exe /e, "C:\open\this\folder"
所以我想以普通路径表示法获得完整路径和文件夹名称。这是在资源管理器 Windows 的标题栏中显示的内容:“C:\open\this\Favorite folder”
建议的代码是:
function Get-WindowTitle($handle) {
Get-Process |
Where-Object { $_.MainWindowHandle -eq $handle } |
Select-Object -Expand MainWindowTitle
}
$app = New-Object -COM 'Shell.Application'
$app.Windows() |
Select-Object LocationURL, @{n='Title';e={Get-WindowTitle $_.HWND}}
Run Code Online (Sandbox Code Playgroud)
如上所示,LocationURL 以转义 URL 样式提供完整路径:
file:///C:/open/this/Favorite%20%folder"
Run Code Online (Sandbox Code Playgroud)
@{n='Title';e={Get-WindowTitle $_.HWND}} 组件生成一个列“Title”,该列被截断为 5 个字符:
C:\...
Run Code Online (Sandbox Code Playgroud)
一个资源管理器窗口的完整输出如下所示:
LocationURL Title
----------- -----
file:///C:/open/this/Favorite%20%folder C:...
Run Code Online (Sandbox Code Playgroud)
我发现我可以通过用许多空格填充字符串 'Title' 来避免截断。该字符串的宽度似乎决定了输出的最大宽度。尽管如此,我观察到只有大约 60% 的打开的资源管理器窗口列出了路径。其余的只是一个空行。
我尝试了“$app.Windows() | Select-Object LocationName”,但输出仅包含资源管理器文件夹名称,而不包含资源管理器标题中显示的完整路径和文件夹。
另一个谜团是为什么脚本运行如此缓慢。如果我打开了 10 个资源管理器窗口,脚本将运行 30 秒,每条路径大约需要 3 秒。
对于这个脚本:
function Get-WindowTitle($handle) {
Get-Process | …Run Code Online (Sandbox Code Playgroud)