Что-то не получается. Получается отслеживать изменение имени и всего остального, а вот получение доступа нет :( Ставлю флаг FILE_NOTIFY_CHANGE_LAST_ACCESS, но ничего не происходит.
Код нашел в инете, везде одинаковый. Вот он:
| Код | ... Filter = FILE_NOTIFY_CHANGE_FILE_NAME or FILE_NOTIFY_CHANGE_DIR_NAME or FILE_NOTIFY_CHANGE_ATTRIBUTES or FILE_NOTIFY_CHANGE_LAST_ACCESS or FILE_NOTIFY_CHANGE_SIZE or FILE_NOTIFY_CHANGE_CREATION or FILE_NOTIFY_CHANGE_SECURITY;
...
procedure WorkThread(LV : TListView);stdcall; const BUF_SIZE = 2048; var hDir : THandle; lpBuf : Pointer; Ptr : Pointer; cbReturn : Cardinal; FileName : PWideChar; Item : TListItem; sTime : _SYSTEMTIME; aaa:String;
begin hDir := CreateFile ('D:\Projects\',GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,nil,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0);
if hDir = INVALID_HANDLE_VALUE then begin ShowMessage(SysErrorMessage(GetLastError)); exit; end;
GetMem(lpBuf,BUF_SIZE);
repeat ZeroMemory(lpBuf,BUF_SIZE); if not ReadDirectoryChangesW(hDir,lpBuf,BUF_SIZE,true,Filter ,@cbReturn,nil,nil) then Break;
Ptr:=lpBuf; repeat Item := Form1.ListView1.Items.Add; GetMem(FileName,PFileNotifyInformation(Ptr).FileNameLength+2); ZeroMemory(FileName,PFileNotifyInformation(Ptr).FileNameLength+2); lstrcpynW(FileName,PFileNotifyInformation(Ptr).FileName, PFileNotifyInformation(Ptr).FileNameLength div 2+1); Item.Caption:='D:\Projects\'+FileName; FreeMem(FileName); case PFileNotifyInformation(Ptr).Action of FILE_ACTION_ADDED : aaa:='создан '; FILE_ACTION_REMOVED : aaa:='удален '; FILE_ACTION_MODIFIED : aaa:='изменен '; FILE_ACTION_RENAMED_OLD_NAME : aaa:=' с '; FILE_ACTION_RENAMED_NEW_NAME : aaa:=' на '; else aaa:='получили доступ? '; end; Item.SubItems.Add(aaa); GetLocalTime(sTime); with sTime do Item.SubItems.Add(Format('%.2d:%.2d:%.2d',[wHour,wMinute,wSecond])); // 13:54:20 if PFileNotifyInformation(Ptr).NextEntryOffset=0 then Break else Inc(Cardinal(Ptr),PFileNotifyInformation(Ptr).NextEntryOffset); until false; until false;
FreeMem(lpBuf); end;
|
Подскажите, а? |