Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
3-9083
IronHawk
2002-02-06 18:44
2002.03.04
Данные из QuickReport.Preview сохранять в *.dbf или *.db файл !!!


1-9127
grab
2002-02-16 21:21
2002.03.04
заполнение ListBox


1-9128
f0rm
2002-02-17 00:00
2002.03.04
Морской бой и матрица :)


1-9238
greenrul
2002-02-14 19:34
2002.03.04
Какая О.С. - идеальная для Delphi5 , если комп не особо мощен


7-9304
amamed_3071
2001-11-22 08:49
2002.03.04
Програмно читать Barcod





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский