吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 378|回复: 6
收起左侧

[讨论] 【VBS】一个重启windows explorer并打开已关闭文件夹的vbs脚本

[复制链接]
lsb2pojie 发表于 2024-11-27 09:38
本帖最后由 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

吧友有什么其他方法可以分享分享

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

昨天√ 发表于 2024-11-27 11:14
@echo off
:: 提示管理员权限请求
:: 检查是否以管理员身份运行
openfiles >nul 2>nul
if %errorlevel% neq 0 (
    echo 请以管理员身份运行此批处理文件!
    pause
    exit
)

:: 结束 explorer.exe 进程
taskkill /f /im explorer.exe

:: 等待 2 秒,确保 explorer.exe 完全终止
timeout /t 2 /nobreak >nul

:: 启动 explorer.exe
start explorer.exe

:: 提示操作完成
echo Windows Explorer 已重新启动。
pause
创建一个新的 BAT 文件:

打开 记事本。
将上述代码复制并粘贴到记事本中。
保存文件为 RestartExplorer.bat(确保保存类型选择 "所有文件")。
以管理员身份运行:

右键点击 RestartExplorer.bat 文件,选择 "以管理员身份运行"。


GPT给的答案
akinet 发表于 2024-11-27 11:29
LeeYuankey 发表于 2024-11-27 12:14
昨天√ 发表于 2024-11-27 11:14
@echo off
:: 提示管理员权限请求
:: 检查是否以管理员身份运行

Win 10 测试成功。
zylz9941 发表于 2024-11-27 12:48
谢谢分享
bachelor66 发表于 2024-11-27 12:55
昨天√ 发表于 2024-11-27 11:14
@echo off
:: 提示管理员权限请求
:: 检查是否以管理员身份运行

关键是打开的窗口,单单重启explorer方法多种
 楼主| lsb2pojie 发表于 2024-11-28 08:45
昨天√ 发表于 2024-11-27 11:14
@echo off
:: 提示管理员权限请求
:: 检查是否以管理员身份运行

可以再问问GPT:
关闭文件资源管理器前读取已打开窗口,重启完explorer后再打开之前关闭的文件夹窗口

batch的话应该需要写文件保存之前的打开文件夹路径
另外最好可以不需要管理员权限执行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-5 06:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表