Ciao
Avevo risposto tempo fa ad una domanda di questo tipo... Puoi usare questo programmino che avevo scritto (e ho leggermente modificato per questo tuo problema) che trovi in allegato.
Ecco il codice da usare:
[StructLayout(LayoutKind.Sequential)]
struct FileInformation
{
public int ProcessID;
public IntPtr FileHandle;
[MarshalAs(UnmanagedType.LPWStr)]
public string FileName;
}
// Importa la funzione dalla Dll. Inserisci il percrso completo
// oppure assicurati che sia nella stessa cartella dell'eseguibile
[DllImport("WhoLocked.dll")]
static extern int GetProcessOpenFiles(int ProcessPid,
[In(), Out()] FileInformation[] OutInfo,
int MaxCount);
// Questa funzione mostra fino a 100 file aperti di un processo:
void ShowProcessOpenFiles(int ProcPid)
{
// Crea l'array dei risultati. Max 100
FileInformation[] fi = new FileInformation[100];
// Ottiene il risultato chiamando la funzione della Dll
int res = GetProcessOpenFiles(ProcPid, fi, 100);
// Crea la stringa del risultato
StringBuilder sb = new StringBuilder();
for (int i = 0; i < res; i++)
{
sb.Append(fi[i].FileHandle);
sb.Append(" --> ");
sb.AppendLine(fi[i].FileName);
}
// Mostra il risultato
MessageBox.Show(sb.ToString());
}
Il post thread lo trovi qui: http://www.dotnethell.it/forum/messages.aspx?ThreadID=28966 (all'ultimo post)
Il link a cui rimando non esiste più da quando ho cancellato il forum, ma lo trovi ancora nella cache di google: http://209.85.129.132/search?hl=it&source=hp&q=cache%3Ahttp%3A%2F%2Fprocoder.forumfree.net%2F%3Ft%3D38978927&btnG=Cerca+con+Google&meta=&aq=f&oq=
Luca