美文网首页
VBA学堂——判断文件是否打开

VBA学堂——判断文件是否打开

作者: Excel大咖 | 来源:发表于2019-11-11 09:16 被阅读0次

在EH论坛看到这样的一个例子:
需要判断文本是否处于打开状态,如果处于打开状态,则关闭该文件

帖子给出了解决的思路:已知txt文件名,可以根据文件名遍历窗体判断是否打开

下面的代码用API函数来解决,通过 FindWindow找出窗体的标题,用PostMessage来关闭进程

#If Win64 Then
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
#Else
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
#End If
Const WM_CLOSE = &H10

Sub 判断txt文件是否打开并关闭()
    Dim hWnd As Long, S As String, myFileName As String
    myFileName = "F:\a.txt"
    S = Mid(myFileName, InStrRev(myFileName, "\") + 1, Len(myFileName)) & " - 记事本"
    hWnd = FindWindow(vbNullString, S)
    If hWnd > 0 Then
        MsgBox "文件已打开"
        PostMessage hWnd, WM_CLOSE, 0&, 0&
    Else
        MsgBox "未发现文本文件:" & S
    End If
End Sub

下面,我提供另外一种解决的思路,用Powershell来判断并关闭进程。

Sub ps()
    Dim S As String, myFileName As String
    myFileName = "F:\a.txt"
    toFileName = "F:\a.ini"
    S = Mid(myFileName, InStrRev(myFileName, "\") + 1, Len(myFileName)) & " - 记事本"

    pc = "Remove-Item -Recurse '" & toFileName & "'" & vbCrLf & _
        "Get-Process |foreach-object {if( $_.mainWindowTItle -eq '" & S & "') { $_.Kill() |Out-File '" & toFileName & "'}}"

    CreateObject("WScript.Shell").Run "powershell " & pc, 0, True
    If Dir(toFileName) <> "" Then
        MsgBox "文件已打开"
    Else
        MsgBox "未发现文本文件:" & S
    End If
End Sub

思路也差不多,通过Get-Process 找出窗体标题,如果有,则创建临时文件,并关闭进程。
通过判断临时文件的是否存在,来判断文件是否已打开。

案例下载:
https://pan.baidu.com/s/1thYcjwP6iSgPGIxhivyZdQ

相关文章

  • VBA学堂——判断文件是否打开

    在EH论坛看到这样的一个例子:需要判断文本是否处于打开状态,如果处于打开状态,则关闭该文件 帖子给出了解决的思路:...

  • 判断手机是否越狱

    通过越狱后增加的越狱文件判断 根据是否能打开cydia判断 根据是否能获取所有应用的名称判断

  • VBA学堂——判断文本编码

    通过VBA怎么去判断文本的编码 首先了解文本的编码。 一般用于Windows系统的(扩展名为.txt)文本编码有四...

  • go 文件操作

    File 建立File内存地址 打开文件 写文件 读文件 删除文件 判断文件是否存在 file写文件 file读文...

  • with open文件操作

    文件流对应的基础操作:f=open('文件名','访问模式');if f:返回boolen类型,判断文件是否打开。...

  • 常用shell脚本

    -d 文件夹---- 判断文件夹是否存在-f 文件 ----- 判断文件是否存在echo "" ---...

  • shell 判断

    判断逻辑,文件,权限,数值 文档类型判断 -f 判断filename是否为文件 -d 判断filename是否为...

  • golang判断文件或文件夹是否存在

    go判断文件或文件夹是否存在 文件/文件夹是否存在/*** function 判断文件/文件夹是否存在* para...

  • iOS 越狱代码检测

    判断手机越狱的几种方式: 1. 通过手机越狱后增加的越狱文件判断 2. 根据是否能打开cydia判断 3.根据是否...

  • 系统 第三天 access 进程

    access判断文件是否存在 opendir :打开目录句柄 进程 ps -A:显示所有进程 kill - 9 +...

网友评论

      本文标题:VBA学堂——判断文件是否打开

      本文链接:https://www.haomeiwen.com/subject/yomzbctx.html