On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 7364
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.04.23 11:04. Заголовок: Как отловить событие правки файла ?


Допустим есть таблица со списками файлов (имя, дата, время).
Тыкаем на файл и запускаю Notepad с этим файлом.
После правки файла - как определить что Notepad закрылся и нужно изменить данные по файлу (дата, время) ?
Можно событие какое то использовать ?
Или можно только по таймеру это делать ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 13 [только новые]


администратор




Пост N: 1932
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.04.23 11:24. Заголовок: Andrey пишет: После..


Andrey пишет:

 цитата:
После правки файла - как определить что Notepad закрылся и нужно изменить данные по файлу


1. По таймеру или в потоке крутить, пытаясь открыть файл в эксклюзиве. Если удалось, нотепад закрылся.
2 есть событие, обслуживающее изменение в каталоге. На форуме давно есть код. автор Петр . Пробовал, работает.
Но в потоке проще решить

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7365
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.04.23 12:04. Заголовок: Haz пишет: Но в пот..


Haz пишет:

 цитата:
Но в потоке проще решить


Не понял, что делать в потоке ?
Notepad, да и другие проги чаще всего открывают не в экслюзиве.
Мне вообще то Winmerge нужен, но пока делаю тест на Notepad.

Haz пишет:

 цитата:
На форуме давно есть код.


А ссылку можешь дать ? Замучаешься искать без ключевого кода.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1933
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.04.23 13:17. Заголовок: Andrey пишет: Notep..


Andrey пишет:

 цитата:
Notepad, да и другие проги чаще всего открывают не в экслюзиве.


Тогда тебе мало что поможет .
Если файл открывается не в эксклюзиве , то программа его просто считала в буфер и работает с этим буфером. В этом случае ловить по блокировке файла бесполезно.
Ключевое слово для поиска wapi_FindFirstChangeNotification, но событие не гарантирует , что NotePad закрылся, событие отловит изменение в определенном каталоге, а это может быть простое сохранение файла из этого каталога, возможно другого файла и при этом NotePad все еще в работе.
Если ты запускаешь NotePad из своей программы , то еще есть шанс как то контролировать этот процесс ( или запуская процесс напрямую или делая снимок процессов до и после запуска , а потом мониторишь процесс в памяти), если тыкаешь в файл в эксплорере и что то отрывается, то почти без вариантов. Даже событие FindFirstChangeNotification не отследит открытие. Ну и последнее с чем можно поиграть - это имя твоего файла в титле открытых окон.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 не проверял, но с др. редакторами работает (похожую штуку использую)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7366
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.04.23 14:00. Заголовок: Haz пишет: Ключевое..


Haz пишет:

 цитата:
Ключевое слово для поиска wapi_FindFirstChangeNotification, но событие не гарантирует , что NotePad закрылся, событие отловит изменение в определенном каталоге, а это может быть простое сохранение файла из этого каталога, возможно другого файла и при этом NotePad все еще в работе.


Программа классная !
В моём случае даже не знаю как и делать.
У меня 12 или чуть больше каталогов придётся мониторить.
Буду думать...
Спасибо БОЛЬШОЕ за подсказки !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7371
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.05.23 22:08. Заголовок: Сделал небольшой при..


Сделал небольшой пример - опрос по таймеру, запуск WinMerge.
После закрытия WinMerge - идёт проверка на изменение файлов.
Работает вроде отлично.
Кому интересно, смотрите - https://cloud.mail.ru/public/q7VT/5pwT29H3S

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7372
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.05.23 10:51. Заголовок: Нашел в инете - http..


Нашел в инете - https://stackoverflow.com/questions/17638674/how-to-wait-for-shellexecute-to-run
Можно для ShellExecuteEx() отслеживать завершение его и сделать "сторожа" для запускаемых внешних программ.
Т.е. тогда не нужен таймер для проверки есть ли такой хендл окна ShellExecuteEx(), при завершении этого окна получаем
событие завершение этого окна, что очень удобно.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7376
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.05.23 13:36. Заголовок: Сделал сторожа запущ..


Сделал сторожа запущенной программы (отдельного потока).
Теперь можно обходиться без таймера.
Исходники выслал Григорию.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7387
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.23 15:09. Заголовок: Сторож запущенной пр..


Сторож запущенной программы (отдельного потока) в Harbour MiniGUI Extended Edition 23.04 (Update 2)
\MiniGUI\SAMPLES\Advanced\ShellExec

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7393
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.06.23 21:09. Заголовок: Сделал с Сергеем два..


Сделал с Сергеем два примера сторожа за списком файлов с ТСБ.
Два варианта: с таймером и по событию.
Исходники отправил Григорию.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7413
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.06.23 23:12. Заголовок: Примеры - сторож за ..


Примеры - сторож за списком файлов с ТСБ (таймером и по событию) уже в новой версии библиотеки МиниГуи.
Спасибо Григорий !

P.S. Без Сергея эти примеры не получились бы ! СПАСИБО !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7433
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.06.23 13:20. Заголовок: Вопрос по новым прим..


Вопрос по новым примерам - MiniGUI\SAMPLES\Advanced\ShellExec
Как заблокировать форму после нажатия кнопки - 'hb_ProcessOpen()' ?
Чтобы вся форма заблокировалась. Есть такое в МиниГуи ?
Я знаю что можно получить список всех объектов на форме и заблокировать их, но это долгое решение.
И на форме всё скачет/бликует при прорисовке объектов.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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, можешь повесить другое окно-пустышку, вместо рабочего

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 37
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет