Collegamento del mio programma all'evento di ridenominazione di Windows Explorer
Domanda
Esiste un modo, in qualsiasi lingua, per agganciare il mio programma quando un utente rinomina un file?
Per esempio:Un utente rinomina un file e preme Invio (o fa clic) 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: est\file.txt in C: est est.txt?".
Penso/spero che questo sia possibile con C++, C# o .NET..Ma non ho idea di dove cercare.
Soluzione
Probabilmente puoi risolvere questo problema utilizzando il file Classe FileSystemWatcher nell'infrastruttura .NET.
Dalle osservazioni della classe:
È possibile controllare la ridenominazione, l'eliminazione, o la creazione di file o directory.Ad esempio, per controllare la ridenominazione di file di testo, impostare la proprietà Filter su "*.txt" e chiamare WaitForChanged con un oggetto Renamed specificato per il suo parametro.
Altri suggerimenti
La mia ipotesi è che sia così non possibile, l'ho trovato Questo che serve per monitorare le operazioni (inclusa la ridenominazione) su una cartella, ma non sembra esserci un metodo simile per i file.
@Richard, FileSystemWatcher è utile se hai solo bisogno di monitorare le modifiche, ma deve interromperle, cosa che non può fare.
IFileOperationProgressSink.PreRenameItem
è la cosa supportata più vicina che io conosca.Sfortunatamente, non è un collegamento a Explorer, quindi puoi usarlo solo per conto tuo IFileOperation
Azioni.A seconda delle tue esigenze, puoi scrivere un'estensione della shell da realizzare tu stesso ConfirmRename
(o qualcosa del genere) e diramarsi da lì.
Altrimenti stai cercando di agganciarti SHFileOperation
, Penso.Questa operazione dovrebbe essere eseguita in codice non gestito, poiché verrai caricato in Explorer.exe.Per Vista, questo è stato cambiato in IFileOperation
- il che probabilmente significa che dovrai agganciarne la creazione e distribuire il tuo mock.
Personalmente, visto che stai parlando di una ridenominazione, Un'idea di Wilhelm Tell di confermare Dopo il cambiamento e annullarlo, se necessario, è l'idea migliore.