Собственно с дельфисорса взято когда-то.
Код:
procedure TMonDirThread.Execute;
var
HandleChange: THandle; //Handle создаваемого объекта для ожидания события
begin
//-- Создаем объект для ожидания события
HandleChange :=
FindFirstChangeNotification(
PChar(FPath), //Проверяемый каталог
False, //Подкаталоги не проверяются
FILE_NOTIFY_CHANGE_FILE_NAME + //Проверка создания/удаления/
FILE_NOTIFY_CHANGE_ATTRIBUTES); //переименования/изменения файлов
//-- При ошибке Win32Check выводит сообщение и прерывает Execute.
Win32Check(HandleChange <> INVALID_HANDLE_VALUE);
Synchronize(ThreadStart); //Сообщение о старте потока
try
//-- Цикл, пока для потока не будет выдана команда Terminate
while not Terminated do
begin
case WaitForSingleObject(HandleChange,1000) of
WAIT_FAILED: Terminate; //Ошибка, завершаем поток
WAIT_OBJECT_0: Synchronize(UpdateLog); //Сообщаем об изменении
end;
FindNextChangeNotification(HandleChange);
end;
finally
FindCloseChangeNotification(HandleChange);
end;
Synchronize(ThreadStop); //Сообщаем о завершении потока
end;
А можно сделать через драйвер (распальцовка была бы больше

).