Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
Сергей Ю.   (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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1144607113
Дева
2006-04-09 22:25
2006.04.23
Всплывающее меню по щелчку левой кнопки


15-1143611220
Ega23
2006-03-29 09:47
2006.04.23
С Днём рождения! 29 марта


2-1144140081
azl
2006-04-04 12:41
2006.04.23
Вкладка ActiveX в Delphi 2006


3-1140741494
Rodelim
2006-02-24 03:38
2006.04.23
Внешние таблицы для ACCESS


15-1143746621
Yanis
2006-03-30 23:23
2006.04.23
Хорошая прога :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский