Как перехватить C++ в событии переименования Explorer

Я не могу быть более ясным, чем мой титул.:П

Я хочу запускать свою программу всякий раз, когда пользователь переименовывает файл в проводнике Windows (и только в проводнике). Вот простой макет:

Переименовать макет Hook

Простая ссылка на учебник будет очень полезна. Я не мог ничего найти.:/

Заранее спасибо.

PS Я новичок в C++

2 ответа

Похоже, перехват Windows API может быть вашим лучшим выбором. Вы захотите перехватить все вызовы, связанные с переименованием файлов Windows (например, MoveFile, MoveFileEx, SHFileOperation, возможно, больше). Есть несколько коммерческих и открытых решений; Microsoft Detours, MadCi MadCodeHook и бесплатный EasyHook с открытым исходным кодом.

Этот подход, если все сделано правильно, позволит вам перехватывать все переименования файлов в системе.

Я бы по возможности избегал перехвата API. Это становится действительно ужасно быстро.

Я вижу, что вы можете подойти к этому 2 способами.
Оба способа имеют несколько общих факторов:

  • ReadDirectoryChangesW API. Для очень хорошей реализации этого API, см. Эту статью
  • Вам нужно будет минимизировать ваши зависимости, так что... Используйте компилятор Microsoft, создайте ссылку на среду выполнения DLL, максимально придерживайтесь C и т. Д. Это уменьшает проблемы. Загрузка вещей в память оболочки уже достаточно проблематична.

Первый метод заключается в использовании ReadDirectoryChangesW из расширения оболочки Explorer, которое больше ничего не делает. Держите это минимальным. Я вполне уверен, что видел расширение оболочки "ничего не делать" в качестве примера в некоторой документации Microsoft.

Второй способ заключается в том, чтобы упаковать ваш код в виде DLL и использовать системный хук для загрузки вашей DLL только в Explorer. Системный хук должен загружаться только внутри Проводника, чтобы предотвратить ложные уведомления через ReadDirectoryChangesW,

Надеюсь, это поможет, и вы не используете это для чего-то злого.

Другие вопросы по тегам