Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизЕсли не помогает WaitForSingleObject ... Найти похожие ветки
← →
kblc © (2006-02-02 17:29) [0]Уважаемые мастера, не могли бы вы помочь мне решить эдакую проблему:
Мне нужно запустить winword.exe %1 и дождаться его завершения... и всё бы было хорошо, если бы это был ПЕРВЫЙ winword.exe запущенный мной. Как только создаётся (пусть будет второй) winword.exe и открывает файл, то он то ли передаёт управление уже запущенному winword.exe, то ли ещё что-то... ну вообщем он файл открывает и завершается, хотя редактирование ещё не было закончено. Вот сама суть проблемы.
Как мне ДОЖДАТЬСЯ того момента, когда пользователь всё-таки закончит редактировать документ и закроет winword.exe?
Вообще суть вопроса сводится к следующему:
1) можно ли сделать так, что бы созданный снова (CreateProcess) winword.exe не закрывался после открытия (напомню: в системе уже запущен как минимум 1 winword.exe)?
2) Если же нельзя, то что можно предпринять для того, что бы обеспечить достоверность завершения процесса работы пользователя с документом.
3) Если использовать Word.Application, то при закрытии winword.exe, порождённого CreateOleObject() мы не никак не можем определить был ли закрыт процесс (разве что обращение к любому методу вызывает exception). <- вот это, возможно, плод моего больного воображения, и я буду рад если вы посоветуете мне как это исправить
Заранее благодарю за ответы и надеюсь на вашу помощь.
← →
Eraser © (2006-02-02 17:39) [1]
> kblc © (02.02.06 17:29)
> Как только создаётся (пусть будет второй) winword.exe и
> открывает файл, то он то ли передаёт управление уже запущенному
> winword.exe
именно так он и делает.
> 1) можно ли сделать так, что бы созданный снова (CreateProcess)
> winword.exe не закрывался после открытия (напомню: в системе
> уже запущен как минимум 1 winword.exe)?
нет.
> 2) Если же нельзя, то что можно предпринять для того, что
> бы обеспечить достоверность завершения процесса работы пользователя
> с документом.
открыть дескриптор (OpenHandle) уже сущетсвующего winword и дождаться его закрытия (дескриптора).
Но узнать, что пользователь закрыл именно КОНКРЕТНЫЙ документ нельзя.
Можно поизвращатся с поиском заголовка окна с нужным заголовком (FindWindow, GetWindowText)... как частоное решение думаю этот способ подойдёт.
← →
kblc © (2006-02-02 18:04) [2]
> Можно поизвращатся с поиском заголовка окна с нужным заголовком
> (FindWindow, GetWindowText)... как частоное решение думаю
> этот способ подойдёт.
К сожалению (или к счастью) этот способ не подходит. В одно и тоже время пользователь может открыть разные документы с одним и тем же названием :(
Как вариант: CreateOleObject() - всегда создаёться новый процесс winword.exe, но как ПРАВИЛЬНО определить окончание работы с документом - я не знаю :(
Может кто подскажет?
← →
umbra © (2006-02-02 18:16) [3]2 kblc © (02.02.06 18:04) [2]
как ПРАВИЛЬНО определить окончание работы с документом
сCreateOleObject
такой проблемы просто нет. Создаем экземпляр ворда, открываем документ, делаем ворд видимым и освобождаем переменную. Юзер сам закрывает ворд. Код примерно такой:
var
WordApp: variant;
{.........................................}
WordApp := CreateOleObject("Word.Application");
WordApp.Open("f:\ull\path\to\file.doc");
WordApp.Visible := True;
WordApp := UnAssigned;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c