powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Компонент мониторинга каталога
17 сообщений из 17, страница 1 из 1
Компонент мониторинга каталога
    #38261407
Janex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.
Помню когдато видел компонент мониторинга директория, типо
мониторит директории непоявилось ли чтото нового, не удалили ли чтото итд.
Но шас немогу вспомнить где такое живёт и где искать ...
Напомните, пожалуиста, если ктото в курсе.


WBR
Janex
...
Рейтинг: 0 / 0
Компонент мониторинга каталога
    #38261419
Фотография Feg16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Компонент мониторинга каталога
    #38261436
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TJvChangeNotify
...
Рейтинг: 0 / 0
Компонент мониторинга каталога
    #38261450
Notification
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Компонент мониторинга каталога
    #38261452
Фотография 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
Компонент мониторинга каталога
    #38261455
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Компонент мониторинга каталога
    #38261456
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Компонент мониторинга каталога
    #38261465
ShellShock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TStShellNotification from TurboPower ShellShock
...
Рейтинг: 0 / 0
Компонент мониторинга каталога
    #38261467
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Код: pascal
1.
2.
3.
  fmMain.sbMain.Panels[1].Text := 'Отключен';
  fmMain.mmStart.Enabled := True; // Отключаем кнопку mmStart
  fmMain.mmStop.Enabled := False; // Включаем кнопку mmStop


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

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

Эх...

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


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

Эх...

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

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

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


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