2011-12-06 1 views
6

내가하려는 것은 내 WPF 응용 프로그램에서 Powerpoint 프레젠테이션을 제어하는 ​​것입니다. 이 질문의 코드는 다음과 같습니다. C# - way to programmatically advance Powerpoint slide show? 정상적인 슬라이드에서는 아주 잘 작동합니다.클릭 애니메이션으로 프로그래밍 방식으로 파워 포인트 슬라이드 쇼 진행

하지만 mouseclick에 의해 트리거 된 애니메이션이있는 슬라이드에 도달하면 바로 예상대로 작동하지 않습니다. 그런 슬라이드로 이동하면 예상대로 표시되지만 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(); 
} 

:

는 내가 가지고있는 코드입니다. 그러나 나는 꽤 오랫동안 내 머리를 두드리는 오전 : (

+0

, 문제가 자동으로 실행 시간 제한 애니메이션이 있다는 것을있을 수 있습니다 그렇다면, 내가 PPT가 응답하지 않을 생각? oSlideShowView.Next 이제까지 애니메이션 처리가 끝났습니다. –

+0

@ steve-rindsberg 아니요, 테스트 한 PPT에는 애니메이션이 없습니다. 테스트 프로젝트를 만들고 여기에 업로드했습니다 : https : // skydrive. live.com/redir.aspx?cid=edd93823761d5c8e&resid=EDD93823761D5C8E!10340&parid=EDD93823761D5C8E!139&authkey=!AMpcxEYSf90vv24 (이 zip에는 두 개의 슬라이드가있는 테스트 ppt가 있습니다. 첫 번째 슬라이드의 클릭 애니메이션). – Malyngo

+0

저는 C (샤프, 플랫, 플러스, 마이너스) 녀석이 아니며 지금 당황하고 있습니다. 나는 볼 시간이 있다면 어쨌든 많은 도움이되지 않을 것입니다. 죄송합니다. –

답변

3

MSDN 포럼에서 내 문제의 해결책을 얻었습니다 : 버튼을 사용할 때 PPT에 포커스가 없기 때문에 애니메이션이 제대로 재생되지 않습니다. 내가 oSlideShowView.Next()를 호출하기 전에 SlideShowWindows을 활성화하면, 그것은 작동 :

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