Сведения о вопросе

Martincow

04:32, 9th August, 2020

Теги

c#   .net   file   io    

Подключение моей программы к событию переименования windows explorer

Просмотров: 515   Ответов: 3

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

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

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



  Сведения об ответе

fo_I_K

11:11, 21st August, 2020

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

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

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


  Сведения об ответе

SEEYOU

06:20, 8th August, 2020

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

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


  Сведения об ответе

baggs

21:37, 8th August, 2020

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться