2008-08-23 15 views
7

C'è un modo, in qualsiasi lingua, di agganciare il mio programma quando un utente rinomina un file?Agganciare il mio programma con l'evento di rinomina di Windows Explorer

Ad esempio: Un utente rinomina un file e preme Invio (o fa clic di distanza) per confermare l'azione di ridenominazione. PRIMA che il file venga effettivamente rinominato, il mio programma "ascolta" questo evento e visualizza un messaggio che dice "Sei sicuro di voler rinominare C: \ test \ file.txt in C: \ test \ test.txt?".

Sto pensando/sperando che questo sia possibile con C++, C# o .NET .. Ma non ho idea di dove cercare.

risposta

5

È possibile risolvere questo problema utilizzando lo FileSystemWatcher class in .NET framework.

Da quanto classe:

È possibile guardare per la ridenominazione, la cancellazione, o la creazione di file o directory. Ad esempio, per guardare per rinominare file di testo, impostare la proprietà Filter per "* .txt" e chiamare il metodo WaitForChanged con un Renamed specificato per il suo parametro.

0

La mia ipotesi è che questo è non possibile, ho trovato this che è per le operazioni (tra cui rinomina) il monitoraggio su una cartella, ma non sembra essere un metodo simile per i file.

@Richard, FileSystemWatcher è utile se è necessario monitorare solo le modifiche, ma è necessario interromperle e non è possibile.

0

IFileOperationProgressSink.PreRenameItem è la cosa supportata più vicina che io conosca. Sfortunatamente, non è un hook in Explorer, quindi puoi usarlo solo per le tue azioni IFileOperation. A seconda delle esigenze, è possibile scrivere un'estensione della shell per fare il proprio ConfirmRename (o qualcosa di simile) e diramare da lì.

Altrimenti, stai cercando di agganciare SHFileOperation, penso. Questo dovrebbe essere fatto in codice non gestito, in quanto verrà caricato in Explorer.exe. Per Vista, questo è stato modificato in IFileOperation - il che probabilmente significa che dovrai agganciarne la creazione e distribuire la tua simulazione.

Personalmente, penso che dato che si sta parlando una ridenominazione, wilhelmtell's idea di confermare dopo il cambiamento, e disfare, se necessario, è l'idea migliore.