Newsgroup: it.comp.appl.access
Titolo: identificare nome file pdf aperto

ciao a tutti
è possibile identificare quale file di una dir è aperto?
grazie

Si... 
Cicla i file della cartella ed interroga con WMI il sistema...
 
https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-tasks--files-and-folders
 
 
@Alex


grazie


cosi riesco a chiudere i processi
Dim ObjProcessi, Objprocesso As Variant
Set ObjProcessi = GetObject("WinMgmts:root/CIMV2").ExecQuery( _
"SELECT * FROM Win32_Process WHERE Name='PDFXCview.exe'")
 
For Each Objprocesso In ObjProcessi
  Debug.Print Objprocesso.Name          
Next
 
ma per i vari file?

Ma se invece del pdf.exe metti il nome del PDF cosa succede...?
 
In teoria otterrai solo 1 item se è aperto.
 
Per cicla re la folder usa ul loop con Dir...
 
Function LoopThroughFiles(inputDirectoryToScanForFile, filenameCriteria) As String
 
    Dim StrFile As String
    'Debug.Print "in LoopThroughFiles. inputDirectoryToScanForFile: ", inputDirectoryToScanForFile
 
    StrFile = Dir(inputDirectoryToScanForFile & "\*" & filenameCriteria)
    Do While Len(StrFile) > 0
        Debug.Print StrFile
        StrFile = Dir
 
    Loop
 
End Function
 
@Alex


grazie

Il giorno domenica 7 giugno 2020 12:49:23 UTC+2, @Alex ha scritto:

non capisco perchè pur avendo più di un file aperto,
mi mostra solo il primo e il for next esegue un solo passaggio;
forse la query così impostata non è corretta?
ecco il codice:
Set objWMI = GetObject("winmgmts://")
Set objProcesses = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'PDFXCview.exe'")
For Each objProcess In objProcesses
  Debug.Print objProcess.CommandLine   
Next


la butto li credo che il tuo problema sia che se apri 3 pdf con quel 
software, tu li vedi tutti e tre come schede dentro una unica istanza 
del programma a differenza di acrobat reader che te ne mostrerebbe una 
per file
 
 
se apri i tre file con acrobat e modifichi il codice con
 
Set objWMI = GetObject("winmgmts://")
Set objProcesses = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE 
Name = 'AcroRd32.exe'")
For Each objProcess In objProcesses
   Debug.Print objProcess.CommandLine
Next
 
te li mostra tutti o sempre solo uno?
 
 
 
 
 


grazie per la risposta,
anche io ho avuto la tua stessa idea
ed avevo provato sempre con PDFXCview
a togliere la spunta a documenti con schede
per poi metterla in permetti esecuzioni multiple,
ma non era cambiato nulla.
Proverò anche con acrobat reader.


Ti propongo questo che sicuramente è più Semplice:
 
Public Function CheckFiles(Startpath As string)
    Dim MyPath As String
    Dim MyName As String
    ctl .RowSource = ""
    MyPath = Startpath
    MyName = Dir(MyPath)
    Do While MyName <> ""
        If MyName Like "*.PDF" then
           IF IsFileOpen (Startpath & "\" & myName) Then
              MsgBox "APERTO"
           End If
        End if
        MyName = Dir
    Loop
    ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1)
End Function
 
Function IsFileOpen(FileName As String)
    Dim ff As Long, ErrNo As Long
 
    On Error Resume Next
    ff = FreeFile()
    Open FileName For Input Lock Read As #ff
    Close ff
    ErrNo = Err
    On Error GoTo 0
 
    Select Case ErrNo
    Case 0:    IsFileOpen = False
    Case 70:   IsFileOpen = True
    Case Else: Error ErrNo
    End Select
End Function
 
@Alex


grazie Alex
che parametro passo a ctl.RowSource
perchè nella function manca

Scusa quella riga cancellala è un refuso di un mio codice... non serve.
 
@Alex

 @Alex
 
Complimenti
grazie