PowerPoint SlideShowSettings.Run() не запускает встроенное видео

У меня есть приложение C#, которое работает на компьютере, подключенном к большому дисплею в нашей столовой. Приложение извлекает все файлы PowerPoint из папки и непрерывно запускает каждый из них в виде слайд-шоу. Все работало нормально, пока кто-то не решил вставить клип на слайд. Проблема в том, что фильм никогда не начинается. Если открыть презентацию в PowerPoint и запустить шоу, оно работает, и если я щелкну правой кнопкой мыши презентацию и нажму «показать», оно сработает. Вот код, который я использую, чтобы открыть презентацию и запустить слайд-шоу.

pres = app.Presentations.Open(pptPath, MsoTriState.msoTrue, MsoTriState.msoTrue, MMsoTriState.msoFals);
pres.SlideShowSettings.Run();

Есть ли что-то еще, что мне нужно установить, чтобы метод Run() также запускал фильмы?

Редактировать. В рассматриваемой презентации был только один слайд, содержащий фильм. Если я добавлял к нему еще один слайд, он работал нормально. Также пытался добавить слайд раньше и имел ту же проблему, поэтому, по-видимому, проблема существует только для последнего слайда в презентации.


person AdmSteck    schedule 18.06.2010    source источник


Ответы (2)


Основная проблема здесь заключается в том, что анимация PowerPoint (видео, аудио, настраиваемые пути движения и т. д.) будет воспроизводиться только тогда, когда SlideShowWindow имеет фокус. Это означает, что когда вы запускаете свое приложение и запускаете PPT, ваше приложение по-прежнему сохраняет фокус и, следовательно, анимация не запускается (хотя это не мешает вам вручную манипулировать беговой колодой).

Есть несколько способов обойти это:

  1. Вы можете вызвать API SetWindow, чтобы вывести SlideShowWindow на передний план. На мой взгляд, не лучший способ сделать это.
  2. Самый простой способ — просто сохранить .ppt/.pptx в .pps/.ppsx (PowerPoint Show). При этом вы можете использовать тот же код для его запуска, и он автоматически запустится и получит фокус (и ваши анимации [видео и др.) будут работать так, как вы предполагали).
person Todd Main    schedule 19.06.2010
comment
Он уже настроен на автоматическое воспроизведение. Если я запускаю слайд-шоу вручную, все работает. У меня проблема только тогда, когда я запускаю слайд-шоу, используя код в вопросе, а фильм находится на последнем слайде презентации. - person AdmSteck; 19.06.2010
comment
@АдмСтек. Хорошо, понял. У меня есть для вас хорошие и плохие новости. Ответ обновлен. - person Todd Main; 19.06.2010

Нашел проблему. У меня был оператор thread.sleep в обработчике событий app_SlideShowNextSlide презентации, который обрабатывал конец одного слайд-шоу и начало следующего. В то время я не думал, и этот код выполнялся в том же потоке, что и само слайд-шоу. Вместо этого я создал объект таймера и переместил необходимый код в обработчик событий elapsed таймера.

person AdmSteck    schedule 22.06.2010