Как определить идентификатор приложения в котором открыт файл?

Есть некое приложение написанное на C++ которое открывает файлы в ассоциированном приложении. Проблема в том, что не все приложения возвращают ссылку (идентификатор) на процесс.
Как можно 100% узнать ссылку?
И еще как можно узнать не открыт ли этот файл?

На ум приходит поиск по заголовкам открытых окон, но как это лучше сделать?

Спасибо!
  • Вопрос задан
  • 4005 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Eddy_Em
ОСь какая?
В линуксе и линуксоподобных: fuser, lsof | grep имя_файла. Обе (и fuser, и lsof) работают, сканируя дерево в /proc/PIDs. Аналогично и свое реализуется.
Ответ написан
AxisPod
@AxisPod
Хм, а зачем приложению возвращать, если надо получить программно, то функция CreateProcess принимает последним параметром указатель PROCESS_INFORMATION, куда и поместит pid, handle процесса и т.д.
Ответ написан
Kwent
@Kwent
computer vision DS
Если правильно понял, то для проверки открыт ли файл, можно вызвать CreateFile с FILE_SHARE_MODE=0 и если файл открыт где-либо, то функция должна завершиться с ERROR_SHARING_VIOLATION.
Ответ написан
Комментировать
sopov
@sopov Автор вопроса
Мне нужно знать заранее, открыт файл или нет т.к. файл лежит на сервере и чтобы его повторно не скачивать нужна проверка.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы