Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2010, 08:54   #1
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию ShellExecuteEx

Доброго времени суток.
Сразу к делу.

Есть некоторое количество файлов разных типов (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.
Neobrat вне форума Ответить с цитированием
Старый 07.09.2010, 09:30   #2
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

может быть использовать какой нибудь id потока? не знаю как он в Delphi называется.

Или проверять открыт ли файл Word'ом или какой нибудь другой программой (так умеет делать Windows, значит и вы сможете)... Или проверять есть ли доступ к айлу для записи: офисные программы вроде открывают его для монопольного использования
Никки вне форума Ответить с цитированием
Старый 07.09.2010, 14:05   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

В общем случае - никак.

Пользователь должен кликнуть по кнопке "Ok, я закончил".

Причина:
- запускаемая программа может просто передать файл на открытие своей предыдущей запущенной копии, про которую вы ничего не знаете, и закрыться, ничего не сделав.
- пользователь может закрыть документ, но не программу.

Варианты:
- можно ждать пока файл не будет разблокирован.
- можно задрочиться на варианты часто используемых программ и их особенности.

Но, повторяю, в общем случае - никак.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 07.09.2010, 14:35   #4
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

а что мешает проверять ошибки при переносе на пример в таймере? ведь если файл используется офисом то он не удалиться. или я ошибаюсь?
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 07.09.2010, 18:17   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
а что мешает проверять ошибки при переносе на пример в таймере? ведь если файл используется офисом то он не удалиться. или я ошибаюсь?
Далеко не всякий редактор файлов блокирует файл на время изменений.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 09.09.2010, 15:02   #6
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Далеко не всякий редактор файлов блокирует файл на время изменений.
я только про ворд и ексел говорил, так как автор топика не смог его по процессам вычислить. предложил, так сказать, альтернативный вариант проверки на работу офиса с нужными файлами.

а решил так по указанным в начале прогам.
OC: WinXP.
Office 2007
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 09.09.2010 в 15:04. Причина: добавил
IliaIT вне форума Ответить с цитированием
Старый 09.09.2010, 15:10   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
а решил так по указанным в начале прогам.
OC: WinXP.
Office 2007
"Указанные в начале проги" - это:
Цитата:
Сообщение от Neobrat Посмотреть сообщение
word, excel, pdf, access, txt
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц