Torna al Thread
Imports System.Runtime.InteropServices
Public Class TuaForm
<StructLayout(LayoutKind.Sequential)> _
Structure FileInformation
'ID del processo che tiene aperto il file
Public ProcessID As Integer
'Handle del file aperto dal processo
'(è riferito al contesto del processo, quindi non puoi farci praticamente niente con questo)
Public FileHandle As IntPtr
End Structure
'Importa la funzione dalla dll. Inserisci il percorso completo corretto della dll,
'oppure assicurati che la dll si trovi nella cartella dell'eseguibile
<DllImport("WhoLocked.dll")> _
Shared Function GetPidLockingFile( _
<MarshalAs(UnmanagedType.LPWStr)> ByVal filePath As String, _
<[In](), Out()> ByVal outInfo As FileInformation(), _
ByVal maxCount As Integer) As Integer
End Function
Private Sub TuoButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TuoButton.Click
'Richiede il file da monitorare
Dim OFD As New OpenFileDialog()
If (OFD.ShowDialog() <> Windows.Forms.DialogResult.OK) Then Return
'Alloca l'array che conterrà gli ID dei processi che tengono aperto il file
Dim fileInfo(50) As FileInformation
'Ottiene le informazioni dalla funzione nella Dll, e il numero di processi trovati
Dim count As Integer = GetPidLockingFile(OFD.FileName, fileInfo, 50)
'Cicla su tutti i processi mostrando l'output in una RichTextBox
For i As Integer = 0 To count - 1
'Scrive le informazioni sulla richtextbox
TuaRichTextBox.AppendText(String.Format("Process ID: {0}" & vbCrLf & "Handle: 0x{1:X}" & vbCrLf & vbCrLf, _
fileInfo(i).ProcessID, CInt(fileInfo(i).FileHandle)))
Next
End Sub
End Class