![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 10.12.2007
Сообщений: 124
|
![]()
Доброго времени суток.
Сразу к делу. Есть некоторое количество файлов разных типов (word, excel, pdf, access, txt и т.д.) Необходимо открыть файл на редактирование, дождаться завершения редактирования, и перенести измененный файл в другое место. С первого взгляда вроде бы все просто. Используем функцию ShellExecuteEx. При помощи ее получаем процесс(hProcess), через определенное время проверяем живой ли еще этот процесс (GetExitCodeProcess) и если процесс завершен, то копируем файл в другую директорию. Но проблема в том что word и excel не создают новую копию приложения и функция ShellExecuteEx не возвращает процесс. Решил именно для word и excel использовать CreateProcess. Но и тут поджидал подвох ![]() Excel создает новый процесс, а вот Word не хочет. Вот ума не приложу как же быть… Может есть у кого предложение по этому поводу? p.s. Не знаю в какую ветку поместить, поэтому написал сюды. OC: WinXP. Office 2007
Русский язык не мой конёк
![]() Последний раз редактировалось Neobrat; 07.09.2010 в 09:01. |
![]() |
![]() |
![]() |
#2 |
Форумчанин Подтвердите свой е-майл
Регистрация: 20.11.2007
Сообщений: 500
|
![]()
может быть использовать какой нибудь id потока? не знаю как он в Delphi называется.
Или проверять открыт ли файл Word'ом или какой нибудь другой программой (так умеет делать Windows, значит и вы сможете)... Или проверять есть ли доступ к айлу для записи: офисные программы вроде открывают его для монопольного использования |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
В общем случае - никак.
Пользователь должен кликнуть по кнопке "Ok, я закончил". Причина: - запускаемая программа может просто передать файл на открытие своей предыдущей запущенной копии, про которую вы ничего не знаете, и закрыться, ничего не сделав. - пользователь может закрыть документ, но не программу. Варианты: - можно ждать пока файл не будет разблокирован. - можно задрочиться на варианты часто используемых программ и их особенности. Но, повторяю, в общем случае - никак.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
![]()
а что мешает проверять ошибки при переносе на пример в таймере? ведь если файл используется офисом то он не удалиться. или я ошибаюсь?
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Далеко не всякий редактор файлов блокирует файл на время изменений.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
![]()
я только про ворд и ексел говорил, так как автор топика не смог его по процессам вычислить. предложил, так сказать, альтернативный вариант проверки на работу офиса с нужными файлами.
а решил так по указанным в начале прогам. OC: WinXP. Office 2007
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
Последний раз редактировалось IliaIT; 09.09.2010 в 15:04. Причина: добавил |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
"Указанные в начале проги" - это:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |