Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Компонент мониторинга каталога / 17 сообщений из 17, страница 1 из 1
17.05.2013, 10:00:51
    #38261407
Janex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
Привет всем.
Помню когдато видел компонент мониторинга директория, типо
мониторит директории непоявилось ли чтото нового, не удалили ли чтото итд.
Но шас немогу вспомнить где такое живёт и где искать ...
Напомните, пожалуиста, если ктото в курсе.


WBR
Janex
...
Рейтинг: 0 / 0
17.05.2013, 10:06:03
    #38261419
Feg16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
...
Рейтинг: 0 / 0
17.05.2013, 10:13:07
    #38261436
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
TJvChangeNotify
...
Рейтинг: 0 / 0
17.05.2013, 10:21:07
    #38261450
Notification
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
...
Рейтинг: 0 / 0
17.05.2013, 10:22:02
    #38261452
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
Компонент не нужен. Всё решается довольно просто системными событиями + свой поток

Вот примерно так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
type

  TMonDirThread = class(TThread)
  private
    FPath: string;
    procedure ThreadStop;
    procedure UpdateLog;
    procedure ThreadStart;


  public
    constructor Create(aPath: String);
  protected
    procedure Execute; override;
  end;


implementation

uses
  ShellAPI, inifiles, ShlObj, Registry, comobj, ActiveX;

{$R *.dfm}


constructor TMonDirThread.Create(aPath: String);
begin
inherited Create(True);    // Поток создаем в состоянии «Приостановлен» 
  FreeOnTerminate := True;  // Поток освободит ресурсы при окончании работы 
  FPath := aPath;           // Проверяемый каталог 
  Self.Priority := tpHighest; // Стартуем с высоким приоритетом
  Resume;                    // Переводим поток в состояние «Активен»
end;

procedure TMonDirThread.Execute;
var
  HandleChange: THandle;  // Handle создаваемого объекта для ожидания события 
begin 
// -- Создаем объект для ожидания события 
  HandleChange := 
    FindFirstChangeNotification( 
      PChar(FPath),                           // Проверяемый каталог 
      False,                                  // Подкаталоги не проверяются 
      FILE_NOTIFY_CHANGE_FILE_NAME +          // Проверка создания/удаления/ 
      FILE_NOTIFY_CHANGE_ATTRIBUTES);         // переименования/изменения файлов

// -- При ошибке Win32Check выводит сообщение и прерывает Execute. 
    Win32Check(HandleChange <> INVALID_HANDLE_VALUE); 
      Synchronize(ThreadStart);               // Сообщение о старте потока 
  try 
// -- Цикл, пока для потока не будет выдана команда Terminate 
    while not Terminated do 
    begin 
      case WaitForSingleObject(HandleChange,1000) of 
        WAIT_FAILED: Terminate;                // Ошибка, завершаем поток 
        WAIT_OBJECT_0: Synchronize(UpdateLog); // Сообщаем об изменении

      end; 
      FindNextChangeNotification(HandleChange); 
    end; 
  finally 
    FindCloseChangeNotification(HandleChange); 
  end; 
  Synchronize(ThreadStop);                     // Сообщаем о завершении потока
end;


procedure TMonDirThread.ThreadStart;
begin
  fmMain.sbMain.Panels[1].Text := 'Активен';
end;

procedure TMonDirThread.ThreadStop;
begin
  fmMain.sbMain.Panels[1].Text := 'Отключен';
  fmMain.mmStart.Enabled := True; // Отключаем кнопку mmStart
  fmMain.mmStop.Enabled := False; // Включаем кнопку mmStop
end;



procedure TMonDirThread.UpdateLog;
Var
 f, s: string;
begin
  f := IncludeTrailingPathDelimiter(fmMain.Edit1.text) + 'print.txt';
  s := IncludeTrailingPathDelimiter(fmMain.Edit1.text) + 'print.bat';

  if FileExists(f) then
  begin

    ShellExecute(Application.Handle, 'open', PAnsichar('print.bat'), PAnsichar('print.txt'), PAnsichar(QuotedStr(fmMain.Edit1.Text)), SW_HIDE);

    sleep(2000);
    Application.ProcessMessages;
    DeleteFile(f);
    fmMain.sbMain.Panels[0].Text := DateTimeToStr(now);
  end;

end;

...
Рейтинг: 0 / 0
17.05.2013, 10:22:43
    #38261455
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
...
Рейтинг: 0 / 0
17.05.2013, 10:23:33
    #38261456
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
...
Рейтинг: 0 / 0
17.05.2013, 10:26:27
    #38261465
ShellShock
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
TStShellNotification from TurboPower ShellShock
...
Рейтинг: 0 / 0
17.05.2013, 10:27:51
    #38261467
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
X11
Код: pascal
1.
2.
3.
  fmMain.sbMain.Panels[1].Text := 'Отключен';
  fmMain.mmStart.Enabled := True; // Отключаем кнопку mmStart
  fmMain.mmStop.Enabled := False; // Включаем кнопку mmStop


За обращение к гуям из потока нужно бить по...

Эх...
...
Рейтинг: 0 / 0
17.05.2013, 10:30:17
    #38261473
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
wadmanЗа обращение к гуям из потока нужно бить по...

Эх...

а synchronize на что?
...
Рейтинг: 0 / 0
17.05.2013, 10:35:18
    #38261484
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
wadmanX11
Код: pascal
1.
2.
3.
  fmMain.sbMain.Panels[1].Text := 'Отключен';
  fmMain.mmStart.Enabled := True; // Отключаем кнопку mmStart
  fmMain.mmStop.Enabled := False; // Включаем кнопку mmStop


За обращение к гуям из потока нужно бить по...

Эх...

если очень хочется, то можно ;)
Для этого и придумали Synchronize :)
...
Рейтинг: 0 / 0
17.05.2013, 10:39:08
    #38261490
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
С сообщениями проще и надежнее.
...
Рейтинг: 0 / 0
17.05.2013, 10:44:57
    #38261504
Feg16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
wadmanС сообщениями проще и надежнее.А если оконные сообщения повиснут?
...
Рейтинг: 0 / 0
17.05.2013, 10:45:19
    #38261507
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
Feg16А если оконные сообщения повиснут?
Это как?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.11.2017, 00:50:53
    #39553177
Nashev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
В этой теме столько ссылок в разные невнятные места и ничего конкретного, пригодного для того чтоб взять и использовать.

http://www.cyberforum.ru/delphi-beginners/thread972061.html#post11712505 - а там вот я свой вариант приложил, на мой взгляд для тиражирования пригодный.
...
Рейтинг: 0 / 0
15.11.2017, 12:55:56
    #39553400
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
Nashev,

TJvChangeNotify. Скорее всего - лучше твоего велосипеда будет работать. Чем твой код лучше?
...
Рейтинг: 0 / 0
15.11.2017, 13:05:36
    #39553414
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компонент мониторинга каталога
авторПуть к папке, которая будет наблюдаться.TJvChangeNotify, насколько я бегло понял по коду, сразу несколько папок мониторит.
Вангую, что за счет WaitForMultipleObjects он это делает без нагрузки на систему.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Компонент мониторинга каталога / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]