Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Если не помогает 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.054 c
1-1138560810
taz
2006-01-29 21:53
2006.03.05
Меняем вид компонентов


4-1134239135
totuin
2005-12-10 21:25
2006.03.05
Програмное выключение монитора


15-1139542859
Бугага
2006-02-10 06:40
2006.03.05
Barry Manilow - Mandy


2-1139943463
Volf_555
2006-02-14 21:57
2006.03.05
Что написано в DLL неверно???


3-1136611574
Andron.Ru
2006-01-07 08:26
2006.03.05
Скрипт для Oracle