Зацепив мою программу с помощью проводника переименовать событие


Есть ли способ на любом языке подключить мою программу, когда пользователь переименовывает файл?

Например: Пользователь переименовывает файл и нажимает enter (или щелкает мышью), чтобы подтвердить действие переименования. Прежде чем файл будет переименован, моя программа "прослушает" это событие и выскочит сообщение со словами "Вы уверены, что хотите переименовать C:testfile.txt to C:testtest.txt?".

Я думаю / надеюсь, что это возможно с C++, C# или .NET.. но я не имею ни малейшего понятия, где искать.

3 7

3 ответа:

Вероятно, вы можете решить эту проблему с помощью класса FileSystemWatcher в .NET framework.

Из замечаний класса:

Вы можете следить за переименованием, удалением, или создание файлов или каталогов. Например, следить за переименованием текстовые файлы, установите свойство Filter в "*.txt " и вызовите WaitForChanged метод с переименованным указанным для его параметр.

Я предполагаю, что это Не возможно, я нашел Этот, который предназначен для мониторинга операций (включая переименование) в папке, но, похоже, нет аналогичного метода для файлов.

@Richard, FileSystemWatcher хорош, если вам нужно только отслеживать изменения, но ему нужно прерывать их, что он не может сделать.

IFileOperationProgressSink.PreRenameItem это самая близкая поддержанная вещь, которую я знаю. К сожалению, это не крюк в Explorer - так что вы можете использовать его только для ваших собственных действий IFileOperation. В зависимости от ваших потребностей, вы можете написать расширение оболочки, чтобы сделать свой собственный ConfirmRename (или что-то), и ветвиться оттуда.

В противном случае, вы смотрите на подсечку SHFileOperation, я думаю. Это должно быть сделано в неуправляемом коде, так как вы будете загружены в Проводник.exe. Для Vista это было изменено на IFileOperation - что, вероятно, означает вам придется зацепить его создание и раздать свой макет.

Лично я думаю, что, поскольку вы говорите о переименовании, идея вильгельмтелла подтвердить после изменения и отменить его, если это необходимо, является лучшей идеей.