Форум: "WinAPI";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
ВнизReadDirectoryChagesW на все логичесике диски Найти похожие ветки
← →
NeoMaster © (2005-08-14 13:39) [0]Можно ли установить слежение за изменениями с помощью ReadDirectoryChangesW на всех логических дисках?
← →
Юрий Зотов © (2005-08-14 14:58) [1]Можно поставить свою ловушку для каждого диска (см. GetLogicalDrives (или GetLogicalDriveStrings), GetDriveType, FindFirstChangeNotification, FindNextChangeNotification, FindCloseChangeNotification), и в потоке ждать изменений (см. WaitForSingleObject или WaitForMultipleObjects), а когда изменение произошло - анализировать его через ReadDirectoryChangesW.
← →
NeoMaster © (2005-08-14 19:42) [2]>Юрий Зотов
Пожалуйста поконктретней напиши о том как ставить Hook на изменение.
← →
Игорь Шевченко © (2005-08-15 10:16) [3]
> Можно ли установить слежение за изменениями с помощью ReadDirectoryChangesW
> на всех логических дисках?
Можно. По одной ловушке для каждого диска.
← →
Rouse_ © (2005-08-15 12:32) [4]> Пожалуйста поконктретней напиши о том как ставить Hook на
> изменение.unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
PFileNotifyInformation = ^TFileNotifyInformation;
TFileNotifyInformation = record
NextEntryOffset: DWORD;
Action: DWORD;
FileNameLength: DWORD;
FileName: array [0..MAX_PATH - 1] of WideChar;
end;
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
const
Filter = FILE_NOTIFY_CHANGE_FILE_NAME or
FILE_NOTIFY_CHANGE_DIR_NAME or
FILE_NOTIFY_CHANGE_ATTRIBUTES or
FILE_NOTIFY_CHANGE_SIZE or
FILE_NOTIFY_CHANGE_LAST_WRITE or
FILE_NOTIFY_CHANGE_LAST_ACCESS or
FILE_NOTIFY_CHANGE_CREATION or
FILE_NOTIFY_CHANGE_SECURITY;
var
Dir: THandle;
Notify: TFileNotifyInformation;
BytesReturned: DWORD;
begin
Dir := CreateFile("d:\", GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,
nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if Dir <> INVALID_HANDLE_VALUE then
try
if not ReadDirectoryChangesW(Dir, @Notify, SizeOf(TFileNotifyInformation),
False, Filter, @BytesReturned, nil, nil) then
raise Exception.Create(SysErrorMessage(GetLastError))
else
case Notify.Action of
FILE_ACTION_ADDED: ShowMessage("New file" + Notify.FileName);
FILE_ACTION_REMOVED: ShowMessage("Delete file" + Notify.FileName);
FILE_ACTION_MODIFIED: ShowMessage("Modify file" + Notify.FileName);
FILE_ACTION_RENAMED_OLD_NAME: ShowMessage("Old Name file" + Notify.FileName);
FILE_ACTION_RENAMED_NEW_NAME: ShowMessage("New Name file" + Notify.FileName);
end;
finally
CloseHandle(Dir);
end;
end;
end.
← →
NeoMaster © (2005-08-15 19:19) [5]Отслеживать изменения на одном диске я умею. А каким образом можно сделать с несколькими дисками сразу.
Пожалуйста попробуйте выше описанный код изменить, чтобы он отслеживал изменения на нескольких дисках. ВОТ ПРОБЛЕМА ТО.
← →
Alexander Panov © (2005-08-15 19:22) [6]Продублируй этот код для каждого диска.
ВОТ ПРОБЛЕМА ТО.
← →
Fay © (2005-08-15 19:25) [7]2 Alexander Panov © (15.08.05 19:22) [6]
>> Продублируй этот код ...
8))
← →
NeoMaster © (2005-08-15 19:56) [8]В начале определяешь сколько лог. дисков на компьютере, а затем уже вызываешь этот код.
Вот строчка :Dir := CreateFile("d:\", GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
А мне нужно установить за всеми дисками, не только за d:\.(точное кол-во дисков не известно)
← →
Alexander Panov © (2005-08-15 20:02) [9]см. [6]
← →
Fay © (2005-08-15 20:06) [10]2 NeoMaster © (15.08.05 19:56) [8]
Прочитай уже ответ [1] Юрия Зотова
← →
NeoMaster © (2005-08-16 07:47) [11]Пожалуйста киньте примерчик.
← →
NeoMaster © (2005-08-16 17:50) [12]up
← →
Fay © (2005-08-16 18:12) [13]2 NeoMaster © (16.08.05 7:47) [11]
var
ld, n : DWORD;
s : string;
begin
ld := GetLogicalDrives;
for n := 0 to 31 do
if ((ld shr n) and 1) <> 0 then
begin
s := Char(Ord("A") + n) + ":\";
if GetDriveType(PChar(s)) = DRIVE_FIXED then
ShowMessage(s);
end;
← →
SpyBoy © (2005-08-16 18:32) [14]Нельзя ли объяснить , что может , а чего не может эта ваша ловушка на диск.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c