Зацепив мою программу с помощью проводника переименовать событие
Есть ли способ на любом языке подключить мою программу, когда пользователь переименовывает файл?
Например: Пользователь переименовывает файл и нажимает enter (или щелкает мышью), чтобы подтвердить действие переименования. Прежде чем файл будет переименован, моя программа "прослушает" это событие и выскочит сообщение со словами "Вы уверены, что хотите переименовать C:testfile.txt to C:testtest.txt?".
Я думаю / надеюсь, что это возможно с C++, C# или .NET.. но я не имею ни малейшего понятия, где искать.
3 ответа:
Вероятно, вы можете решить эту проблему с помощью класса FileSystemWatcher в .NET framework.
Из замечаний класса:
Вы можете следить за переименованием, удалением, или создание файлов или каталогов. Например, следить за переименованием текстовые файлы, установите свойство Filter в "*.txt " и вызовите WaitForChanged метод с переименованным указанным для его параметр.
Я предполагаю, что это Не возможно, я нашел Этот, который предназначен для мониторинга операций (включая переименование) в папке, но, похоже, нет аналогичного метода для файлов.
@Richard, FileSystemWatcher хорош, если вам нужно только отслеживать изменения, но ему нужно прерывать их, что он не может сделать.
IFileOperationProgressSink.PreRenameItem
это самая близкая поддержанная вещь, которую я знаю. К сожалению, это не крюк в Explorer - так что вы можете использовать его только для ваших собственных действийIFileOperation
. В зависимости от ваших потребностей, вы можете написать расширение оболочки, чтобы сделать свой собственныйConfirmRename
(или что-то), и ветвиться оттуда.В противном случае, вы смотрите на подсечку
Лично я думаю, что, поскольку вы говорите о переименовании, идея вильгельмтелла подтвердить после изменения и отменить его, если это необходимо, является лучшей идеей.SHFileOperation
, я думаю. Это должно быть сделано в неуправляемом коде, так как вы будете загружены в Проводник.exe. Для Vista это было изменено наIFileOperation
- что, вероятно, означает вам придется зацепить его создание и раздать свой макет.