本帖最后由 lsb2pojie 于 2024-11-28 08:48 编辑
升级windows11后,有时候熄屏重新打开,任务栏会出现异常:
- 某些功能点击没反应
- 任务栏假隐藏:应用的窗口底部被任务栏挡住。。。
搜了下也没找到什么解决方案:
https://answers.microsoft.com/zh-hans/windows/forum/all/win11%E4%BB%BB%E5%8A%A1%E6%A0%8F%E9%81%AE%E6%8C%A1/edc5adef-a2af-4d1f-994f-aa9548d1976f
只能自己重启资源管理器,但是重启后,之前打开的文件管理窗口就都关闭了
写个脚本:关闭文件资源管理器前读取已打开窗口,重启完explorer后再打开
batch需要写文件保存之前的文件夹路径,不太优雅,越简单越好,就用VB写一个
[Visual Basic] 纯文本查看 复制代码
Option Explicit
Dim objShell, objExplorer, colWindows, objWindow, dictWindowTitles, intWaitTime
' 创建 Shell.Application 和 WScript.Shell 对象
Set objShell = CreateObject("WScript.Shell")
Set objExplorer = CreateObject("Shell.Application")
' 创建字典对象来存储文件夹路径
Set dictWindowTitles = CreateObject("Scripting.Dictionary")
' 获取所有 Explorer 窗口
Set colWindows = objExplorer.Windows
' 遍历所有 Explorer 窗口,记录每个窗口的标题
For Each objWindow In colWindows
If Not IsEmpty(objWindow) And Not IsEmpty(objWindow.LocationName) Then
' 解码 URL 并记录完整路径
Dim strFolderPath
strFolderPath = DecodeURL(objWindow.LocationURL)
' 使用完整路径作为键,确保唯一性
If Not dictWindowTitles.Exists(strFolderPath) Then
dictWindowTitles.Add strFolderPath, objWindow.hwnd
End If
End If
Next
' 关闭资源管理器
objShell.Run "taskkill /F /IM explorer.exe", , True
' 等待一段时间让系统稳定下来
intWaitTime = 1000 ' 毫秒
WScript.Sleep intWaitTime
' 重新启动资源管理器
objShell.Run "explorer.exe"
' 等待资源管理器启动完成
WScript.Sleep intWaitTime
' 尝试恢复所有记录的窗口
Dim key
For Each key In dictWindowTitles.Keys
key = "explorer.exe " & key
objShell.Run key
'WScript.Echo "[restore] " & key
WScript.Sleep 200 ' 给系统一些时间来处理每个窗口的激活
Next
' 清理对象
Set objShell = Nothing
Set objExplorer = Nothing
Set dictWindowTitles = Nothing
' 解码 URL 函数
Function DecodeURL(url)
' 替换 %20 为 空格
url = Replace(url, "%20", " ")
' 替换 file:// 为 空字符串
url = Replace(url, "file:///", "")
' 将正斜杠替换为反斜杠
url = Replace(url, "/", "\")
' 返回解码后的路径
DecodeURL = url
End Function
以上脚本创建一个文件黏贴进去,文件后缀改为vbs就可以执行了,比如:reloadExplorer.vbs
吧友有什么其他方法可以分享分享
|