![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пауза в приложении. [D2005, XP]
BanderLog © (2005-11-02 12:16:00)Мастера, подскажите пожалуйста, как реализовать паузу в приложении, допустим на секунда. Ситуация такая, один файл необходимо переместить из одного каталога в другой, но при этом файл бывает не всегда освобожден программой, которая с ним работает. необходимо подождать секунду - другую и повторить попытку переноса.
BanderLog (2005-11-04 13:08:00) [1]Спасибо всем :)
Сделал как советовал
> Digitman © (03.11.05 12:39) [9]
Полностью отпал вопрос с OLE, т.к. скрипт запускается из командной строки. Так же появилась возможность отмены обработки файлов, и запуск автокада невидимым. Все чудесно работает...
Leonid Troyanovsky (2005-11-03 12:55:00) [2]
> BanderLog (03.11.05 12:02) [8]
> После завершения обработки скриптом, с файлами проводится
> ещё ряд манипуляий, которые скрипту не под силу... Которые
> в любом случай необходимо выполнять по завершению автокада.
Ну, если у объекта Автокад есть свойства типа идентификатора
текущего процесса, или, хотя бы, хендла активного окна, то
проблемы с ожиданием решаются просто, как уже рассказывал
уважаемый Digitman ©. Если нет - то можно попробывать вернуть
результат вызова из скрипта того же GetCurrentProcessId.
(в VBA описание оной ф-ции выглядело б примерно так:
declare function GetCurrentThreadId lib "kernell32" as Long).
--
Redgards, LVT.
Digitman (2005-11-03 12:39:00) [3]
> BanderLog (03.11.05 12:02) [8]
а у Акада как сервера автоматизации разве нет событий, извещающих олей-контроллер об открытии/закрытии документов ?
я просто не в курсе ..
скажем, у Excel.Application есть событие OnWorkbookBeforeClose, которое вполне можно приспособить для фиксации факта завершения работы сервера с файлом документа
BanderLog (2005-11-03 12:02:00) [4]После завершения обработки скриптом, с файлами проводится ещё ряд манипуляий, которые скрипту не под силу... Которые в любом случай необходимо выполнять по завершению автокада.
Leonid Troyanovsky (2005-11-03 11:58:00) [5]
> BanderLog (03.11.05 09:06) [5]
> Автокад я запускаю сам через CreateOleObject, потом запускаю
> в нем скрипт, который закрывает автокад. После отработки
> скрипта необходимо закопировать обработанные файлы в другой
> каталог.
А чего, скрипт не может сам скопировать файлы в другой каталог?
--
Regards, LVT.
Digitman (2005-11-03 10:03:00) [6]
> как отловить момент закрытия автокада?
ищешь процесс Автокада в списке активных процессов, получаешь его PID, открываешь процесс, получаешь его хэндл
далее ждешь завершения процесса с пом. одной из удобных тебе WaitFor-функций
еще лучше будет стартовать процесс Автокада явно (CreateProcess), при этом искать его в списке процессов не требуется - ф-ция вернет хэндл процесса .. а после этого обращаешься к стартованному процессу как к олей-серверу (GetActiveOleObject)
BanderLog (2005-11-03 09:06:00) [7]Идет обработка автокадоских файлов скриптом в автокаде. Автокад я запускаю сам через CreateOleObject, потом запускаю в нем скрипт, который закрывает автокад. После отработки скрипта необходимо закопировать обработанные файлы в другой каталог.
Возникает вопрос, как отловить момент закрытия автокада?
Digitman (2005-11-02 13:27:00) [8]
> Ситуация такая, один файл необходимо переместить из одного
> каталога в другой, но при этом файл бывает не всегда освобожден
> программой, которая с ним работает
а программу эту ты САМ программнозапускаешь ?
или типа неизвестно заранее, кто и как сейчас пользует это файл, потому типа и подождать (хрен знает сколько) не грех ?
BanderLog (2005-11-02 12:37:00) [9]Совсем забыл.... Спасибо :)
BanderLog (2005-11-02 12:24:00) [10]О! Оно!!!! перебрал все варианты Delay, Pause... а про него забыл :)
Игорь Шевченко (2005-11-02 12:18:00) [11]Sleep(1000) ?