Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.45 MB
Время: 0.012 c
15-1139550534
Ega23
2006-02-10 08:48
2006.03.05
С Днём рождения! 10 февраля


2-1137598739
2Wish
2006-01-18 18:38
2006.03.05
Abstract Error


1-1138525707
EBS
2006-01-29 12:08
2006.03.05
Отладка


15-1139490614
PARUS
2006-02-09 16:10
2006.03.05
Нажатие.


1-1138915522
guitarist
2006-02-03 00:25
2006.03.05
заполнение форм в IE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский