Продвижение слайд-шоу Powerpoint программно с анимацией кликов - PullRequest
6 голосов
/ 06 декабря 2011

Я пытаюсь управлять презентацией Powerpoint из моего приложения WPF. С кодом из этого вопроса: C # - способ программно продвигать слайд-шоу Powerpoint? это работает довольно хорошо для обычных слайдов.

Но как только я попадаю на слайд с анимацией, запускаемой щелчком мыши, он не работает, как я ожидал. При переходе к такому слайду он будет отображаться, как и ожидалось, но когда я вызываю objPres.SlideShowWindow.View.Next (), он ничего не делает, а после второго или третьего щелчка идет прямо к следующему слайду, без анимации. .

Странная вещь: Когда я вызываю objPres.SlideShowWindow.View.Next () через таймер, это работает! Анимации работают как положено.

Это код, который у меня есть:

Microsoft.Office.Interop.PowerPoint.Application oPPT;
Microsoft.Office.Interop.PowerPoint.Presentations objPresSet;
Microsoft.Office.Interop.PowerPoint.Presentation objPres;
Microsoft.Office.Interop.PowerPoint.SlideShowView oSlideShowView;
Timer slidetest;

private void OpenPPT(object sender, RoutedEventArgs e)
{
    //Create an instance of PowerPoint.
    oPPT = new Microsoft.Office.Interop.PowerPoint.Application();
    // Show PowerPoint to the user.
    oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
    objPresSet = oPPT.Presentations;


    OpenFileDialog Opendlg = new OpenFileDialog();

    Opendlg.Filter = "Powerpoint|*.ppt;*.pptx|All files|*.*";

    // Open file when user  click "Open" button  
    if (Opendlg.ShowDialog() == true)
    {
        string pptFilePath = Opendlg.FileName;
        //open the presentation
        objPres = objPresSet.Open(pptFilePath, MsoTriState.msoFalse,
        MsoTriState.msoTrue, MsoTriState.msoTrue);

        objPres.SlideShowSettings.ShowPresenterView = MsoTriState.msoFalse;
        System.Diagnostics.Debug.WriteLine(objPres.SlideShowSettings.ShowWithAnimation);
        objPres.SlideShowSettings.Run();

        oSlideShowView = objPres.SlideShowWindow.View;


        slidetest = new Timer(4000);
        slidetest.AutoReset = false;
        slidetest.Elapsed += new ElapsedEventHandler(slidetest_Elapsed);
        slidetest.Start();

    }
}

void slidetest_Elapsed(object sender, ElapsedEventArgs e)
{
    // this works as expected
    oSlideShowView.Next();
}

private void OnNextClicked(object sender, RoutedEventArgs e)
{
    // this doesn't work, animations aren't shown at all.
    oSlideShowView.Next();
}

Я уверен, что это легко, и я что-то упускаю. Но я уже довольно долго бьюсь об этом: (

1 Ответ

4 голосов
/ 09 декабря 2011

Я получил решение моей проблемы на форумах MSDN: При использовании кнопки анимация не воспроизводится правильно, потому что PPT не имеет фокуса. Когда я активирую SlideShowWindows перед вызовом oSlideShowView.Next (), он работает:

private void OnNextClicked(object sender, RoutedEventArgs e)
{
    oSlideShowView.Application.SlideShowWindows[1].Activate();
    oSlideShowView.Next();
}
...