Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11656
Последний выпуск: 19.06.2015

Несколько экземпляров приложения

50K
13 октября 2013 года
xk289sk
8 / / 05.01.2011
Пишу небольшую утилиту на C#. Казалось все просто, да не тут-то было.

Задача (по этапам):
1) запустить документ (в ассоциированном с разрешением файла приложении);
2) получить ссылку на главное окно приложения;
3) изменить размеры окна.

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

Например, Acrobat Reader при открытии второго PDF-документа запускает второй процесс (точнее два, но не суть), а потом находит первый процесс и закрывает второй, перемещая документ в памяти. Так вот, первоначальная задача свелась к задаче перехвата события закрытия процесса (вариант с таймерами не предлагать - по-деревенски, я ищу лучший способ). В случае с Acrobat'ом ничего сложного: в .NET есть событие

 
Код:
Process.Exited
Подписался, и точный момент закрытия процесса известен.

Но помимо PDF-документов есть еще куча других, в частности Djvu. В качестве читалки использую WinDjView. И на этой программе вышеуказанное событие не сработало при открытии второго документа. Т.е. ведь как обычно: запускается второй процесс, пытаемся установить мьютекс, не получается (процесс уже запущен), передаем все что надо и закрываем процесс (тут-то и срабатывает вышеуказанное событие).

Помогите, пожалуйста, понять какие механизмы ОС использует WinDjView и почему второго процесса не создается.

Благодарю.
50K
13 октября 2013 года
xk289sk
8 / / 05.01.2011
Ответ, кажется, найден. DDE.
376
13 октября 2013 года
CassandraDied
763 / / 24.05.2012
Если надо только изменить размеры окна, то для этого нужен хэндл окна, а не процесса. Найти, обычно, можно по имени класса.
50K
17 октября 2013 года
xk289sk
8 / / 05.01.2011
Цитата: CassandraDied
Если надо только изменить размеры окна, то для этого нужен хэндл окна, а не процесса. Найти, обычно, можно по имени класса.


На минусы обижаться не надо. Надо просто принять факт, что экспертом везде быть невозможно и отвечать только на вопросы, ответ на которые 100% верен. Кроме того, вы не поняли вопрос.
Я однажды уже спрашивал и получил ложный ответ. В итоге - месячную работу пришлось хоть и частично, но весьма существенно переделывать.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог