关闭通过Explorer.exe打开的文件夹

CCM

这是一个愚蠢的问题,但是如何通过Excel VBA关闭文件夹?在打开它的代码下面,

Shell "Explorer.exe \\[email protected]\DavWWWRoot\sites\folder", vbMinimizedFocus

不幸的是,这种具有进程ID的解决方案不起作用。

ᴇʜ

以下代码在所有打开的资源管理器窗口中循环。因此,您可以使用它来匹配LocationURL并获取窗口句柄,hWnd并使用Windows APISendMessage关闭窗口。

Option Explicit

'for 64-bit Excel use
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Long) As LongPtr
'for 32-bit Excel use
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long


Const WM_SYSCOMMAND = &H112
Const SC_CLOSE = &HF060

Public Sub CloseWindowExample()
    Dim sh As Object
    Set sh = CreateObject("shell.application")

    Dim w As Variant
    For Each w In sh.Windows
        'print all locations in the intermediate window
        Debug.Print w.LocationURL

        ' select correct shell window by LocationURL
        If w.LocationURL = "file://[email protected]/DavWWWRoot/sites/folder" Then
            SendMessage w.hWnd, WM_SYSCOMMAND, SC_CLOSE, 0
        End If
    Next w
End Sub

请注意,LocationURL路径以开头,file://并且路径中的所有反斜杠\都将转换为斜杠/,如示例所示。

要使其与64位和32位Excel兼容,可以使用

#If VBA7 Then
    Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
        (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Long) As LongPtr
#Else
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
        (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
#End If

请注意,其中之一将以红色标记为编译错误,但代码仍将运行。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在文件夹名称中使用逗号打开 explorer.exe 中的文件夹?

如何使用 explorer.exe (Cygwin) 在 Ranger 中打开文件夹

在WSL中以编程方式运行时,explorer.exe无法打开正确的文件夹

Excel vba 使用相同的 explorer.exe 实例打开文件夹

即使选择了“在一个窗口中打开文件夹”,Explorer.exe也会打开新进程

通过cmd打开“网络”文件夹?

VSCode(code.exe)命令行参数可通过SSH立即打开远程工作区文件夹

通过assetManager打开资产文件夹外部的文件

一键关闭所有打开的文件夹和子文件夹

如何通过终端打开目录/文件夹和URL

通过macOS中的Finder在vscode中打开文件夹?

通过单击通知打开图库文件夹

通过子字符串查找并打开文件夹

如何通过在python中打开该文件夹中的其他文件来打开文件夹循环

Windows 10-右键单击文件或文件夹时,explorer.exe崩溃

通过使用htaccess打开文件夹目录来打开check.php

打开和关闭文件夹中的所有 Excel 文件

如何使用批处理文件关闭指定的打开的文件夹

如何重命名Windows Explorer当前打开的C#中的文件夹

如何通过 Git Bash 启动/打开名称中包含空格的文件/文件夹?

如何通过命令行启动/打开名称中包含空格的文件/文件夹?

如何通过带有文件夹名称正则表达式的python打开文件?

打开文件夹/工作区后关闭VS Code欢迎屏幕

如何在Visual Studio Code中关闭打开的文件夹?

通过cygwin安装后,rxvt.exe不在文件夹中

通过 VB.NET 使用 Rar.exe 压缩文件夹?

如何以全新状态通过终端在VSCode中打开文件夹?

如何通过单击按钮打开下载文件夹?

为什么通过快捷方式打开文件夹使Audacious可以启动?