![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Собственно в этом и непонятка. При открытии такого файла ворд радостно сообщает, что он занят и предлагает нам выбрать дальнейшие действия.
Вот только мне не надо этого счастья вообще. Мне требуется тупо пропустить такой файл и обработать сие как исключение. Вопрос - как? |
|
#2
|
||||
|
||||
|
можно попробовать открыть файл самостоятельно (например, через CreateFile), открылось - не занят, не открылось - занят, правда такой метод не очень гарантирует, что после проверки и до программного открытия файла в ворде пользователь его не откроет сам (а вдруг успеет
) |
|
#3
|
||||
|
||||
|
когда документ открыт рядом появляется файл имя которого начинается с ~$ в нем имя пользователя.
|
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
||||
|
||||
|
Код:
uses ActiveX, ComObj, ... function IsRunning(const PathName: string): Boolean; var bc: IBindCtx; mk: IMoniker; begin OleCheck(CreateBindCtx(0, bc)); OleCheck(CreateFileMoniker(PChar(PathName), mk)); Result:=mk.IsRunning(bc, nil, nil)=S_OK; end; |
|
#6
|
||||
|
||||
|
Читал я про эту штуку IMoniker. Даже пример его использования скачивал, но он там в итоге запускал тот-же ворд, я и бросил не разбираясь в причинах
Попробуем. Как я понял из описания этого интерфеса, приложение которое мы опрашиваем должно уметь использовать эти интерфесы, ворд как раз умеет, но для чего-то иного может и не сработать. |