关闭打开的资源管理器窗口,而无需终止explorer.exe

哈吉(J. Hajjar)

我已经尝试搜索,但是没有什么能真正满足我的需求。

我不希望explorer.exe被终止或重新启动。我只想关闭所有打开的资源管理器窗口。

黑暗松鼠42
    [DllImport("user32.dll")]
    private static extern bool EnumWindows(EnumWindowsDelegate lpEnumFunc, IntPtr lParam);
    [DllImport("user32.dll")]
    private static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out IntPtr lpdwProcessId);
    [DllImport("user32.dll")]
    private static extern uint RealGetWindowClass(IntPtr hwnd, StringBuilder pszType, uint cchType);
    [DllImport("user32.dll")]
    static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

    static uint WM_CLOSE = 0x10;

    private delegate bool EnumWindowsDelegate(IntPtr hwnd, IntPtr lParam);

    private static bool EnumWindowsCallback(IntPtr hwnd, IntPtr lParam)
    {
        IntPtr pid = new IntPtr();
        GetWindowThreadProcessId(hwnd, out pid);
        var wndProcess = System.Diagnostics.Process.GetProcessById(pid.ToInt32());
        var wndClass = new StringBuilder(255);
        RealGetWindowClass(hwnd, wndClass, 255);
        if (wndProcess.ProcessName == "explorer" && wndClass.ToString() == "CabinetWClass")
        {
            //hello file explorer window...

            SendMessage(hwnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); // ... bye file explorer window
        }
        return (true);
    }

    static void Main()
    {
        EnumWindowsDelegate childProc = new EnumWindowsDelegate(EnumWindowsCallback);

        EnumWindows(childProc, IntPtr.Zero);

        Console.ReadKey();
    }

编辑:
所以我想唯一有趣的是回调将由Windows为每个枚举的窗口(在hwnd中所述窗口的句柄)调用

GetWindowThreadProcessId 为我们提供给定窗口句柄的processid

GetProcessById 然后为我们提供一个流程对象,以读取诸如流程名称之类的内容

RealGetWindowClass 为我们提供给定窗口句柄的注册类名称

最后,我们可以查看当前窗口的进程是否为资源管理器,以及窗口类是否为“ CabinetWClass”,这是普通文件资源管理器窗口的窗口类。

最后但并非最不重要的一点是,如果我们的检查通过,请发送一条WM_CLOSE消息,请窗口自行关闭...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

每次右键单击均会导致Windows资源管理器(explorer.exe)崩溃

在Windows运行中排除“ .exe”会打开Windows资源管理器

从资源管理器和cmd.exe产生的Windows权限差异

将变量从Windows资源管理器传递到.exe文件

如何使用一个快捷方式在Windows 10下的cmd.exe中从Windows资源管理器打开文件夹?

我看不到该如何重置explorer.exe?文本未填充在任务管理器,Windows资源管理器和某些其他程序中

Visual Studio 2015 Taks运行程序资源管理器导致多个node.exe进程

重新打开Windows 10中最近关闭的文件资源管理器窗口

如何将上下文菜单项添加到Windows资源管理器中用于exe以外的文件夹

使用Visual Studio 2017编译的.exe的Windows资源管理器文件属性'Details'选项卡中的文件版本0.0.0.0

如何关闭从某个驱动器中打开的文件夹的Windows资源管理器窗口

Windows 7或10:资源管理器排序顺序-区分常规资源管理器窗口与打开文件/浏览器窗口

关闭Spyder中的所有变量资源管理器窗口

powershell命令根据选择关闭Windows资源管理器窗口

如何在同一窗口中从VSCode文件资源管理器打开文件

右键单击Windows 10无法打开新的文件资源管理器窗口

是否可以从PowerShell打开Windows资源管理器窗口?

获取所有打开的资源管理器窗口的报告

vbscript在同一资源管理器窗口中打开文件夹

从Kubuntu 20.04的终端打开文件资源管理器窗口

Powershell脚本列出所有打开的资源管理器窗口

Visual Studio测试资源管理器窗口将不会打开

快捷键再次打开当前资源管理器窗口

命令打开带有筛选结果的Windows资源管理器窗口?

在Windows资源管理器的右窗格中打开文件夹列表,而无需按Enter键

如何彻底关闭 Windows 资源管理器?

Windows资源管理器-默认窗口尺寸

在文件资源管理器中打开目录

在文件上打开资源管理器