Автор | Сообщение |
|
| постоянный участник
|
Пост N: 7364
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.04.23 11:04. Заголовок: Как отловить событие правки файла ?
Допустим есть таблица со списками файлов (имя, дата, время). Тыкаем на файл и запускаю Notepad с этим файлом. После правки файла - как определить что Notepad закрылся и нужно изменить данные по файлу (дата, время) ? Можно событие какое то использовать ? Или можно только по таймеру это делать ?
|
|
|
Ответов - 13
[только новые]
|
|
|
| |
Пост N: 1932
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.04.23 11:24. Заголовок: Andrey пишет: После..
Andrey пишет: цитата: | После правки файла - как определить что Notepad закрылся и нужно изменить данные по файлу |
| 1. По таймеру или в потоке крутить, пытаясь открыть файл в эксклюзиве. Если удалось, нотепад закрылся. 2 есть событие, обслуживающее изменение в каталоге. На форуме давно есть код. автор Петр . Пробовал, работает. Но в потоке проще решить
|
|
|
|
| постоянный участник
|
Пост N: 7365
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.04.23 12:04. Заголовок: Haz пишет: Но в пот..
Haz пишет: Не понял, что делать в потоке ? Notepad, да и другие проги чаще всего открывают не в экслюзиве. Мне вообще то Winmerge нужен, но пока делаю тест на Notepad. Haz пишет: цитата: | На форуме давно есть код. |
| А ссылку можешь дать ? Замучаешься искать без ключевого кода.
|
|
|
|
| |
Пост N: 1933
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.04.23 13:17. Заголовок: Andrey пишет: Notep..
Andrey пишет: цитата: | Notepad, да и другие проги чаще всего открывают не в экслюзиве. |
| Тогда тебе мало что поможет . Если файл открывается не в эксклюзиве , то программа его просто считала в буфер и работает с этим буфером. В этом случае ловить по блокировке файла бесполезно. Ключевое слово для поиска wapi_FindFirstChangeNotification, но событие не гарантирует , что NotePad закрылся, событие отловит изменение в определенном каталоге, а это может быть простое сохранение файла из этого каталога, возможно другого файла и при этом NotePad все еще в работе. Если ты запускаешь NotePad из своей программы , то еще есть шанс как то контролировать этот процесс ( или запуская процесс напрямую или делая снимок процессов до и после запуска , а потом мониторишь процесс в памяти), если тыкаешь в файл в эксплорере и что то отрывается, то почти без вариантов. Даже событие FindFirstChangeNotification не отследит открытие. Ну и последнее с чем можно поиграть - это имя твоего файла в титле открытых окон.
|
|
|
|
| постоянный участник
|
Пост N: 4268
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.04.23 13:30. Заголовок: Andrey пишет После п..
Andrey пишет цитата: | После правки файла - как определить что Notepad закрылся и нужно изменить данные по файлу (дата, время) ? |
| По таймеру проверка Local tDtm1, tDtm2 // tTimeStamp ... hb_FGetDateTime( cFile1, @tDtm1 ) hb_FGetDateTime( cFile2, @tDtm2 ) IF tDtm1 != tDtm2 ... ENDIF ... работает, если было сохранение файла в редакторах и закрытие Notepad не обязательно PS Для Notepad не проверял, но с др. редакторами работает (похожую штуку использую)
|
|
|
|
| постоянный участник
|
Пост N: 7366
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.04.23 14:00. Заголовок: Haz пишет: Ключевое..
Haz пишет: цитата: | Ключевое слово для поиска wapi_FindFirstChangeNotification, но событие не гарантирует , что NotePad закрылся, событие отловит изменение в определенном каталоге, а это может быть простое сохранение файла из этого каталога, возможно другого файла и при этом NotePad все еще в работе. |
| Программа классная ! В моём случае даже не знаю как и делать. У меня 12 или чуть больше каталогов придётся мониторить. Буду думать... Спасибо БОЛЬШОЕ за подсказки !
|
|
|
|
| постоянный участник
|
Пост N: 7371
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.05.23 22:08. Заголовок: Сделал небольшой при..
Сделал небольшой пример - опрос по таймеру, запуск WinMerge. После закрытия WinMerge - идёт проверка на изменение файлов. Работает вроде отлично. Кому интересно, смотрите - https://cloud.mail.ru/public/q7VT/5pwT29H3S
|
|
|
|
| постоянный участник
|
Пост N: 7372
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.05.23 10:51. Заголовок: Нашел в инете - http..
|
|
|
|
| постоянный участник
|
Пост N: 7376
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.05.23 13:36. Заголовок: Сделал сторожа запущ..
Сделал сторожа запущенной программы (отдельного потока). Теперь можно обходиться без таймера. Исходники выслал Григорию.
|
|
|
|
| постоянный участник
|
Пост N: 7387
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.23 15:09. Заголовок: Сторож запущенной пр..
Сторож запущенной программы (отдельного потока) в Harbour MiniGUI Extended Edition 23.04 (Update 2) \MiniGUI\SAMPLES\Advanced\ShellExec
|
|
|
|
| постоянный участник
|
Пост N: 7393
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.06.23 21:09. Заголовок: Сделал с Сергеем два..
Сделал с Сергеем два примера сторожа за списком файлов с ТСБ. Два варианта: с таймером и по событию. Исходники отправил Григорию.
|
|
|
|
| постоянный участник
|
Пост N: 7413
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.06.23 23:12. Заголовок: Примеры - сторож за ..
Примеры - сторож за списком файлов с ТСБ (таймером и по событию) уже в новой версии библиотеки МиниГуи. Спасибо Григорий ! P.S. Без Сергея эти примеры не получились бы ! СПАСИБО !
|
|
|
|
|
| постоянный участник
|
Пост N: 7433
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.06.23 13:20. Заголовок: Вопрос по новым прим..
Вопрос по новым примерам - MiniGUI\SAMPLES\Advanced\ShellExec Как заблокировать форму после нажатия кнопки - 'hb_ProcessOpen()' ? Чтобы вся форма заблокировалась. Есть такое в МиниГуи ? Я знаю что можно получить список всех объектов на форме и заблокировать их, но это долгое решение. И на форме всё скачет/бликует при прорисовке объектов.
|
|
|
|
| постоянный участник
|
Пост N: 4313
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.06.23 13:43. Заголовок: Andrey пишет Чтобы в..
Andrey пишет цитата: | Чтобы вся форма заблокировалась. |
| Попробуй для объекта окна ThisWindow.Object:Enabled := .F. // .T. - вкл. назад This.Object:Enabled := .F. // .T. :Event(..., {|ow| ow:Enabled := .F., ... } или ф-ии DisableWindow ( hWnd ) EnableWindow ( hWnd ) Если ты работаешь все ТОЛЬКО через события, то их обработку можно блокировать ThisWindow.Object:lAction := .F. // .T. - вкл. назад This.Object:lAction := .F. // .T. :Event(..., {|ow| ow:lAction := .F., ... } что то поделал, закончил и опять включил ThisWindow.Object:lAction := .T. This.Object:lAction := .T. :Event(..., {|ow| ow:lAction := .F., ..., ow:lAction := .T. } цитата: | И на форме всё скачет/бликует при прорисовке объектов. |
| Сделай окну hide\minimize, можешь повесить другое окно-пустышку, вместо рабочего
|
|
|
|