Файлы монитора, подобные Системному Монитору Internal's/Microsoft's FileMon/Process

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

К сожалению, ReadDirectoryChangesW не сообщает о близком событии. Для меня было бы возможно опросить (с TTimer) любой файл который сообщаемый ReadDirectoryChangesW, как изменено, ожидая его, чтобы быть закрытым (использование CreateFile для обнаружения этого).

Однако то, что я предпочел бы, является абсолютно управляемым событиями решением.

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

5
задан RobertFrank 27 March 2010 в 06:13
поделиться

5 ответов

В одном только Delphi нет хорошего простого решения вашей проблемы - реальное решение - написать драйвер фильтра для отслеживания событий закрытия файлов.

7
ответ дан 18 December 2019 в 14:44
поделиться

Вам стоит взглянуть на Матиаса Рауэнса madCodeHook :

madCodeHook предлагает все, что вам нужно для подключения кода (в основном API) во всех 32 и 64-битных операционных системах Windows от Windows 95 до Windows 7. Вы можете выбрать, хотите ли вы подключать API в ваш собственный процесс, или в конкретном целевом процессе, или в масштабе всей системы.

5
ответ дан 18 December 2019 в 14:44
поделиться

Внутри Библиотеки кодов джедаев (JCL) у вас есть компонент под названием «TJvChangeNotify», из которого вы можете получить уведомление при обнаружении изменения в отслеживаемом каталоге :

  • Изменено «Последняя запись» => Похоже, это именно то, что вы хотели сделать!

Другие вещи, которые он может делать:

  • Изменен размер файла
  • Изменено имя файла ...

И, что лучше всего, он выполняет поиск внутри папки с подкаталогами, если хотите. {{ 1}} Вот ссылка на (часть) файла справки для этого компонента: http://help.delphi-jedi.org/item.php?Id=172982

Надеюсь на это помогу.

-1
ответ дан 18 December 2019 в 14:44
поделиться

Если уведомления об изменениях не работают, вы можете использовать очень грубый и неубедительный метод: опрос. Каждую секунду или около того пытайтесь открыть файл с несовместимыми параметрами общего доступа. В тот момент, когда это удается, вы знаете, что другое приложение закрыло его.

Не самый чистый вариант, но он будет работать. Это вариант только в том случае, если вам нужно отслеживать ограниченное количество файлов, и их имена известны заранее.

0
ответ дан 18 December 2019 в 14:44
поделиться

Если вы выберете маршрут драйвера фильтра, у Eldos будет компонент CallbackFilter:

http://www.eldos.com/cbflt/spec .php

2
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: