Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Если не помогает WaitForSingleObject ... [D7, Win95/98, WinME, Win2k, WinXP]


kblc ©   (2006-02-02 17:29:00) 

Уважаемые мастера, не могли бы вы помочь мне решить эдакую проблему:
 Мне нужно запустить 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). <- вот это, возможно, плод моего больного воображения, и я буду рад если вы посоветуете мне как это исправить

Заранее благодарю за ответы и надеюсь на вашу помощь.


umbra   (2006-02-02 18:16:00) [1]

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;


kblc   (2006-02-02 18:04:00) [2]


> Можно поизвращатся с поиском заголовка окна с нужным заголовком
> (FindWindow, GetWindowText)... как частоное решение думаю
> этот способ подойдёт.


К сожалению (или к счастью) этот способ не подходит. В одно и тоже время пользователь может открыть разные документы с одним и тем же названием :(

Как вариант: CreateOleObject() - всегда создаёться новый процесс winword.exe, но как ПРАВИЛЬНОопределить окончание работы с документом - я не знаю :(
Может кто подскажет?


Eraser   (2006-02-02 17:39:00) [3]


> kblc ©   (02.02.06 17:29)


> Как только создаётся (пусть будет второй) winword.exe и
> открывает файл, то он то ли передаёт управление уже запущенному
> winword.exe

именно так он и делает.

>  1) можно ли сделать так, что бы созданный снова (CreateProcess)
> winword.exe не закрывался после открытия (напомню: в системе
> уже запущен как минимум 1 winword.exe)?

нет.

>  2) Если же нельзя, то что можно предпринять для того, что
> бы обеспечить достоверность завершения процесса работы пользователя
> с документом.

открыть дескриптор (OpenHandle) уже сущетсвующего winword и дождаться его закрытия (дескриптора).
Но узнать, что пользователь закрыл именно КОНКРЕТНЫЙ документ нельзя.

Можно поизвращатся с поиском заголовка окна с нужным заголовком (FindWindow, GetWindowText)... как частоное решение думаю этот способ подойдёт.


Наверх

Титульная страница Поиск, карта сайта Написать письмо