VBA學(xué)堂——判斷文件是否打開

在EH論壇看到這樣的一個(gè)例子:
需要判斷文本是否處于打開狀態(tài),如果處于打開狀態(tài),則關(guān)閉該文件

帖子給出了解決的思路:已知txt文件名,可以根據(jù)文件名遍歷窗體判斷是否打開

下面的代碼用API函數(shù)來解決,通過 FindWindow找出窗體的標(biāo)題,用PostMessage來關(guān)閉進(jìn)程

#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文件是否打開并關(guān)閉()
    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 "未發(fā)現(xiàn)文本文件:" & S
    End If
End Sub

下面,我提供另外一種解決的思路,用Powershell來判斷并關(guān)閉進(jìn)程。

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 "未發(fā)現(xiàn)文本文件:" & S
    End If
End Sub

思路也差不多,通過Get-Process 找出窗體標(biāo)題,如果有,則創(chuàng)建臨時(shí)文件,并關(guān)閉進(jìn)程。
通過判斷臨時(shí)文件的是否存在,來判斷文件是否已打開。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容