Настоящая ВК появилась как побочный продукт при выполнении проекта по отслеживанию "нежелательных" файлов на компьютерах корпоративной сети. Текущая версия позволяет поддерживать отслеживание изменений одновременно в двух папках (на двух дисках). Выполнена по технологии Native, не требует регистрации в реестре.
Подключение ВК:
ПодключитьВнешнююКомпоненту(ПолноеИмяФайлаВК,"DirSpy",AddInType.Native);
Создание экземпляра класса:
Шпион = Новый("AddIn.DirSpy.V8DirSpy"); // слева любая глобальная переменная.
ВНИМАНИЕ: не проводите никакие эксперименты по использованию локальной переменной класса (например, обработкой), получите дамп.
Методы ВК:
Каталог1(ИмяКаталога,фл_Добавлен,фл_Удален,фл_Модифицирован,фл_Переименован) - устанавливает отслеживание изменений в выбранном каталоге.
ИмяКаталога - строка
фл_Добавлен,фл_Удален,фл_Модифицирован,фл_Переименован - флаги генерации внешнего события, если Истина - генерируется событие:
Источник="DIR_SPY";
Событие- одно из:"FILE_ADDED","FILE_REMOVED","FILE_MODIFIED","FILE_RENAMED_OLD_NAME", "FILE_RENAMED_NEW_NAME".
Данные - полное имя файла.
Флажки - тип булево, необязательные, по умолчанию фл_Добавлен=Истина, остальные Ложь
Метод выполняется в отдельном потоке, возвращаемое значение - идентификатор потока. Если ноль - ошибка создания потока.
Каталог2(ИмяКаталога,фл_Добавлен,фл_Удален,фл_Модифицирован,фл_Переименован) - полностью идентичен методу Каталог1
ОтключитьПоток(ИдентификаторПотока) - отключает слежение и удаляет поток с указанным идентификатором
//--- модуль обычного приложения---
Перем Шпион Экспорт;
Функция КаталогИБ() Экспорт
КаталогИБ = СтрокаСоединенияИнформационнойБазы();
КаталогИБ = Сред(КаталогИБ,7,СтрДлина(КаталогИБ)-8) + "\";
Возврат КаталогИБ;
КонецФункции
Процедура ПриНачалеРаботыСистемы()
ФайлВК=КаталогИБ()+"DirSpy.dll";
Файл= Новый Файл(ФайлВК);
Если Файл.Существует() Тогда
//-- подключение компоненты--
ПодключитьВнешнююКомпоненту(ФайлВК,"DirSpy",AddInType.Native);
//-- создание экземпляра класса--
Шпион = Новый("AddIn.DirSpy.V8DirSpy");
Каталог="c:\"; // весь диск С
// ADD DEL CHANGE RENAME
Хендл1=Шпион.Каталог1(Каталог,Истина,Истина,Ложь,Ложь);
Если Хендл1=0 Тогда
Сообщить("Не удалось создать поток");
КонецЕсли;
Каталог="d:\"; // весь диск D
// ADD DEL CHANGE RENAME
Хендл2=Шпион.Каталог2(Каталог,Истина,Истина,Истина,Истина);
Если Хендл2=0 Тогда
Сообщить("Не удалось создать поток");
КонецЕсли;
Иначе
Сообщить("Не обнаружен файл ВК, скопируйте ""DirSpy.dll"" в КаталогИБ "
+ФайлВК,СтатусСообщения.Информация);
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник="DIR_SPY" Тогда
Сообщить("Событие: "+Событие+"; Данные: "+Данные);
КонецЕсли;
КонецПроцедуры
Примечание для продвинуто-любопытных: используется API ReadDirectoryChangesW
В архиве находится папка с тестовой базой+DirSpy.dll