Форум: "Система";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
Внизфайловая система Найти похожие ветки
← →
Егор Матвеев (2001-11-29 03:03) [13]tShellChangeNotifier - это наверное в D6. У меня D5. Когда-то я задумал сделать что-то типа сканера. Что-то получилось, но вот отследить событие на вход в какую-либо папку так и не удалось, похоже для этого надо писать свою VxD, но это уже отдельный разговор. Я имею ввиду для с-мы FAT. Для с-мы NTFS не стоит завязываться, т.к. там и так все предусмотрено.
1.Надо создать поток.
type
TScanner = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
2. Затем в процедуре Execute выполняем все действия.
procedure TScanner.Execute;
var
dwChangeHandles: array[1..3] of THANDLE ;
begin
dwChangeHandles[1]:= FindFirstChangeNotification("C:\MyFolder",
boolean(0),
FILE_NOTIFY_CHANGE_DIR_NAME );
if (dwChangeHandles[1]= INVALID_HANDLE_VALUE) then
begin
ShowMessage("INVALID_HANDLE_VALUE")
ExitProcess(GetLastError());
end;
dwChangeHandles[2]:= FindFirstChangeNotification("C:\MyFolder",
boolean(0),
FILE_NOTIFY_CHANGE_FILE_NAME);
if (dwChangeHandles[2]= INVALID_HANDLE_VALUE) then
begin
ShowMessage("INVALID_HANDLE_VALUE")
ExitProcess(GetLastError());
end;
dwChangeHandles[3]:= FindFirstChangeNotification("C:\MyFolder",
boolean(0),
FILE_NOTIFY_CHANGE_ATTRIBUTES );
if (dwChangeHandles[3]= INVALID_HANDLE_VALUE) then
begin
ShowMessage("INVALID_HANDLE_VALUE")
ExitProcess(GetLastError());
end;
//Поехали
while not(Terminated) do
begin
case WaitForMultipleObjects(3, @dwChangeHandles,FALSE, 10)
// тут стоит троечка, т.к. массив из трех значений
of
//-------------------------------------------------------------
WAIT_OBJECT_0:
begin
ShowMessage("Произведены действия с дирректорией");
if not FindNextChangeNotification(dwChangeHandles[1])
then
ShowMessage("Ошибочка вкралась...");
end;
//--------------------------------------------------------------------
WAIT_OBJECT_0+1:
begin
ShowMessage("Произведены действия с файлом");
if not FindNextChangeNotification(dwChangeHandles[2])
then
ShowMessage("Ошибочка вкралась...");
end;
//--------------------------------------------------------------------
WAIT_OBJECT_0+2:
begin
ShowMessage("Изменены аттрибуты файла или каталога");
if not FindNextChangeNotification(dwChangeHandles[3])
then
ShowMessage("Ошибочка вкралась...");
end;
//-------------------------------------------------------------
end;
end;
end;
Надеюсь, знаешь как работать с потоками ? Как создавать и удалять.
Посмотри еще в хелпе FindFirstChangeNotification. Извиняюсь, может есть какие неточности.
Если будешь записывать результаты в файл, то смотри чтобы этот файл не был в той же папк которую ты сканируешь, иначе программка за LOOPится :-))
Удачи.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c