![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 17.05.2015
Сообщений: 28
|
![]()
Добрый вечер, подскажите в таком вопросе.
Мне требуется открывать из программы файлы, но после того как с ними поработали, требуется отследить завершение работ и еще операции проделать из программы, но т.е. после того как файл закрыт уже. Но файлы абсолютно любые. Я сейчас использую ShellExecute, но он не позволяет отследить закрытие программы, или я такого не нашел. Я начал использовать CreateProcess со связью WaitForSingleObject, всё работает и отследить получается, НО он работает только для приложений, на файлах он начал выбивать ошибки, ко всему для него нужно статично прописывать пути, нежели как в первом варианте есть выбор программы по умолчанию, да и она сама тип файла определяет. Ну вот и вопрос, можно ли для ShellExecute отследить закрытие программы или файла, короче того что открыто будет. Или же как для CreateProcess сделать открытие всех файлов, может через что-то подобное open, чтобы тип файла или программа через которую надо открыть сама определялась или открывала окно предложения выбора. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
Система может информировать об изменениях файла напрямую.
Ref: https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 17.05.2015
Сообщений: 28
|
![]()
Даже не знаю нормально ли это будет работать, мне не важно каждое изменение, мне важно начало и конец, т.е. открытие и закрытие файла. А тут как я понял может быть такое, что отследит изменение в процессе работы т.е. я например сохраню, но не закрою, тогда вся моя конструкция сломается.
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
Ваша конструкция в принципе шаткая, поскольку даже если получите сигнал закрытия, то пока вы займетесь файлом его может открыть ктото другой...
Получив сигнал изменения файла открывайте файл в ексклюзивном режиме. Если получится, значит никто другой в файл писать пока не будет - либо файл больше не открыт, либо открыт в режиме чтения, что по сути тоже самое. Если вам нужно обязательно знать когда файл закрыт - пишите драйвер, но это не решит проблемы, о которой я упомянул выше. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 17.05.2015
Сообщений: 28
|
![]() |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 17.05.2015
Сообщений: 28
|
![]()
Да не, всё как я и сказал, я собрал данную штуковину. Изменение отслеживается при сохранение, то есть, уже не совсем то что нужно. Если я при первом же сохранение сделаю какие-то изменения, то всё сломается, а файл не был закрыл, его просто сохранили. И ЕЩЕ прям конкретный косяк, а как мне экзешники и просто программы отслеживать таким способом?!
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,718
|
![]() |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 17.05.2015
Сообщений: 28
|
![]() |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,718
|
![]()
В простейшем случае: при эксклюзивном доступе могут подождать. Более продвинутые с драйверами вполне могут следить и фильтровать запросы. А есть еще всякие руткиты и перехватчики функции...
Полагаться на то, что файл никто не трогает плохой вариант. |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 17.05.2015
Сообщений: 28
|
![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
отследить разбегание | Sashenka1 | Общие вопросы Delphi | 0 | 04.04.2016 16:40 |
Отследить ошибку | LuxMi | C# (си шарп) | 5 | 01.02.2013 09:25 |
Отследить программу | Михаил Юрьевич | Общие вопросы Delphi | 6 | 09.09.2012 17:06 |
Отследить проблему | giarmul | JavaScript, Ajax | 0 | 09.08.2010 20:49 |
Отследить стринги | san72 | Общие вопросы Delphi | 2 | 30.05.2009 17:40 |