Подключение моей программы к событию переименования Windows Explorer - PullRequest
7 голосов
/ 24 августа 2008

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

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

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

Ответы [ 3 ]

5 голосов
/ 24 августа 2008

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

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

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

0 голосов
/ 24 августа 2008

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

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

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

0 голосов
/ 24 августа 2008

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

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

...