Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

Отлов подключения флешки и залива туда инфы   Найти похожие ветки 

 
Сергей Ю.   (2006-02-02 09:03) [0]

Подскажите где взять пример для отлова подключения флешки? И как узнать сколько туда заливается инфы. Надо сделать прогу по контролю за юзерами.


 
kaZaNoVa ©   (2006-02-02 09:09) [1]

отлов ... можно обновлять список доступных дисков по таймеру и следить за файлами на флешке ...


 
Сергей Ю.   (2006-02-02 09:24) [2]

Надо за каждый кб залитый на флешку поиметь с клиента бабосы. Тут надо ТОЧНО до кб знать сколько он туда себе залил. Придется тоды раз в секунду это делать, а у меня проге и так задач хватает :)
Да и хоца както красиво это сделать :)


 
kaZaNoVa ©   (2006-02-02 09:31) [3]

Сергей Ю.   (02.02.06 9:24) [2]
поиметь с клиента бабосы.

крута :))))

но он наверное может заливать через разные проги .. боюсь надо чё-то уровня драйвера флешки ..


 
TUser ©   (2006-02-02 10:00) [4]

ReadDirectoryChangesW


 
Сергей Ю.   (2006-02-02 10:02) [5]

А поподробнее где про "ReadDirectoryChangesW" узнать?


 
Игорь Шевченко ©   (2006-02-02 10:10) [6]


> А поподробнее где про "ReadDirectoryChangesW" узнать?


http://msdn.microsoft.com


 
Сергей Ю.   (2006-02-02 12:09) [7]

:) юмор оценил
а если пример где подсмотреть?


 
Gero ©   (2006-02-02 12:12) [8]

> Сергей Ю.   (02.02.06 12:09)
> :) юмор оценил

В каком месте? Скажи, может и я посмеюсь.


 
kaZaNoVa ©   (2006-02-02 12:20) [9]

Сергей Ю.   (02.02.06 12:09) [7]
а если пример где подсмотреть?

Игорь Шевченко ©   (07.10.04 14:27) [1]
unit FolderMonitorThread;

interface
uses
Windows, Classes;

type
TOnNewFileEvent = procedure (const FileName: string) of object;
TOnErrorEvent = procedure (const ErrMsg: string) of object;

TMonitorThread = class(TThread)
private
  FEventsToWait: array[0..1] of THandle;
  FDirectoryHandle: THandle;
  FOverlapped: OVERLAPPED;
  FBuffer: PChar;
  FOnNewFile: TOnNewFileEvent;
  FOnError: TOnErrorEvent;
protected
  procedure Execute; override;
  procedure DoOnNewFile (const FileName: string); dynamic;
  procedure DoOnError (const ErrMsg: string); dynamic;
public
  constructor Create (AStopEvent, ADirectoryHandle: THandle);
  destructor Destroy; override;
  property OnNewFile: TOnNewFileEvent read FOnNewFile write FOnNewFile;
  property OnError: TOnErrorEvent read FOnError write FOnError;
end;

implementation
uses
SysUtils, FolderMonitorConsts, CommonConsts;

const
FOLDER_MONITOR_BUFFER_SIZE = 65530;

procedure ParseNotificationBuffer (Buffer: PChar; AFiles: TStrings);
var
PEntry: PFILE_NOTIFY_INFORMATION;
MoreEntries: Boolean;
begin
AFiles.Clear;
PEntry := PFILE_NOTIFY_INFORMATION(Buffer);
MoreEntries := true;
while MoreEntries do begin
  if PEntry^.NextEntryOffset = 0 then
    MoreEntries := false;
  if PEntry^.Action = FILE_ACTION_ADDED then
    AFiles.Add(WideCharLenToString(PEntry^.FileName,
      PEntry^.FileNameLength div SizeOf(WideChar)));
  PEntry := PFILE_NOTIFY_INFORMATION(PChar(PEntry) + PEntry^.NextEntryOffset);
end;
end;

{ TMonitorThread }

constructor TMonitorThread.Create(AStopEvent, ADirectoryHandle: THandle);
begin
inherited Create(true);
FEventsToWait[0] := AStopEvent;
FEventsToWait[1] := CreateEvent(nil, true, false, nil);
FOverlapped.hEvent := FEventsToWait[1];
FDirectoryHandle := ADirectoryHandle;
FBuffer := AllocMem(FOLDER_MONITOR_BUFFER_SIZE);
if not Assigned(FBuffer) then
  SetEvent(AStopEvent);
end;

destructor TMonitorThread.Destroy;
begin
CloseHandle(FEventsToWait[1]);
if Assigned(FBuffer) then begin
  FreeMem (FBuffer);
  FBuffer := nil;
end;
inherited;
end;

procedure TMonitorThread.DoOnError(const ErrMsg: string);
begin
if Assigned(FOnError) then
  FOnError(ErrMsg);
end;

procedure TMonitorThread.DoOnNewFile (const FileName: string);
begin
if Assigned(FOnNewFile) then
  FOnNewFile(FileName);
end;

procedure TMonitorThread.Execute;
var
BytesRead: DWORD;
WaitResult: DWORD;
Files: TStringList;
I: Integer;
begin
//Не убили ли нас еще при рождении ?
if WaitForSingleObject(FEventsToWait[0], 1) <> WAIT_TIMEOUT then
  Exit;
while not Terminated do begin
  if not ReadDirectoryChangesW (FDirectoryHandle, FBuffer,
      FOLDER_MONITOR_BUFFER_SIZE, false, FILE_NOTIFY_CHANGE_FILE_NAME,
      @BytesRead, @FOverlapped, nil) then begin
    DoOnError(SysErrorMessage(GetLastError));
    Terminate;
    Break; //Невозможно поставить запрос наблюдения каталога в очередь
  end;
  WaitResult := WaitForMultipleObjects(2, @FEventsToWait, false, INFINITE);
  if WaitResult = WAIT_OBJECT_0 then begin
    Terminate;
    Break; //Получен внешний запрос на окончание наблюдения
  end else if WaitResult <> WAIT_OBJECT_0+1 then begin
    DoOnError(SysErrorMessage(GetLastError));
    Terminate;
    Break; //Неизвестная ошибка
  end else begin
    //Закончилась операция чтения изменений в каталоге
    if not GetOverlappedResult (FDirectoryHandle, FOverlapped, BytesRead,
        false) then begin
      DoOnError(SysErrorMessage(GetLastError));
      Terminate;
      Break; //Неизвестная ошибка при попытке получения результата окончания
             //асинхронной операции ввода-вывода
    end;
    // Сейчас в буфере находится BytesRead байт информации об изменениях в
    // каталоге
    Files := TStringList.Create;
    try
      ParseNotificationBuffer (FBuffer, Files);
      for I:=0 to Pred(Files.Count) do
        DoOnNewFile(Files[I]);
    finally
      Files.Free;
    end;
  end;
end;
end;

end.



 
kaZaNoVa ©   (2006-02-02 12:22) [10]

там еще дополнения были:

type
FILE_NOTIFY_INFORMATION = packed record
  NextEntryOffset: DWORD;
  Action: DWORD;
  FileNameLength: DWORD;
  FileName: array[0..0] of WideChar;
end;
PFILE_NOTIFY_INFORMATION = ^FILE_NOTIFY_INFORMATION;


 
Сергей Ю.   (2006-02-02 12:33) [11]

Вот спасибо, буду разбираться что тут и где.
P.S. Юмор - посыл меня на http://msdn.microsoft.com. Былоб куча времени обязятельно все изучил, но это для меня непрофильная задача и времени в обрез.
Еще раз спасибо за пример.


 
Игорь Шевченко ©   (2006-02-02 12:46) [12]


> но это для меня непрофильная задача и времени в обрез.


Вообще-то это твои проблемы, не так ли ? У отвечающих таких непрофильных задач не стоит



Страницы: 1 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
15-1144222044
Lucefer
2006-04-05 11:27
2006.04.23
Нужен криптографический алгоритм с откр. ключем


15-1144042656
Ega23
2006-04-03 09:37
2006.04.23
С Днём рождения! 3 апреля


2-1144254037
Khim
2006-04-05 20:20
2006.04.23
Mail


3-1141225115
Hadroran
2006-03-01 17:58
2006.04.23
Коннект к базе IB


1-1142496507
Леван
2006-03-16 11:08
2006.04.23
Как найти в end, соответствующий begin-у