Как определить идентификатор приложения в котором открыт файл?
Есть некое приложение написанное на C++ которое открывает файлы в ассоциированном приложении. Проблема в том, что не все приложения возвращают ссылку (идентификатор) на процесс.
Как можно 100% узнать ссылку?
И еще как можно узнать не открыт ли этот файл?
На ум приходит поиск по заголовкам открытых окон, но как это лучше сделать?
ОСь какая?
В линуксе и линуксоподобных: fuser, lsof | grep имя_файла. Обе (и fuser, и lsof) работают, сканируя дерево в /proc/PIDs. Аналогично и свое реализуется.
Хм, а зачем приложению возвращать, если надо получить программно, то функция CreateProcess принимает последним параметром указатель PROCESS_INFORMATION, куда и поместит pid, handle процесса и т.д.
Если правильно понял, то для проверки открыт ли файл, можно вызвать CreateFile с FILE_SHARE_MODE=0 и если файл открыт где-либо, то функция должна завершиться с ERROR_SHARING_VIOLATION.