Как перехватить C++ в событии переименования Explorer
Я не могу быть более ясным, чем мой титул.:П
Я хочу запускать свою программу всякий раз, когда пользователь переименовывает файл в проводнике Windows (и только в проводнике). Вот простой макет:
Простая ссылка на учебник будет очень полезна. Я не мог ничего найти.:/
Заранее спасибо.
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
,
Надеюсь, это поможет, и вы не используете это для чего-то злого.