c# .net winforms video powerpoint-2007

c# - Reproducir y pausar el vídeo desde el formulario de control de formulario



.net winforms (1)

Quiero hacer un control de formulario que pueda iniciar, pausar, detener, cerrar la presentación de la prueba (el tiempo de cuenta atrás se ejecutará cuando se presiona inicio). El problema está en algunas presentaciones, hay videos disponibles (cada diapositiva solo puede contener un máximo de 1 video, y no todas las diapositivas lo contienen).

Estos son algunos fragmentos de código que utilicé para agregar video en el método createPresentation :

PowerPoint.Slides oSlides = null; PowerPoint.Slide oSlide = null; int ctrSoal = 0; foreach (CQuestion myQuestion in Global.questions) { ctrSoal++; oSlides = oPre.Slides; oSlide = oSlides.Add(ctrSoal, PowerPoint.PpSlideLayout.ppLayoutTextAndTwoObjects); oShape2 = oSlide.Shapes[4]; oSlide.Shapes.AddMediaObject(System.IO.Path.Combine(Global.myVideoLocation, myQuestion.video), oShape2.Left, oShape2.Top, oShape2.Width, oShape2.Height);

Hasta ahora ya he probado algunas soluciones desde este link

private void startToolStripMenuItem_Click(object sender, EventArgs e) { PowerPoint.Slides oSlides = null; PowerPoint.Slide oSlide = null; int ctrSoal = 0; foreach (CQuestion myQuestion in Global.questions) { ctrSoal++; oSlides = oPre.Slides; oSlide = oSlides.Add(ctrSoal, PowerPoint.PpSlideLayout.ppLayoutTextAndTwoObjects); var playVideo = oSlide.TimeLine.MainSequence.FindFirstAnimationFor(oSlide); } questionIndex = oPre.SlideShowWindow.View.Slide.SlideIndex - 1; questionId = myQuiz.questions[questionIndex].id; if (labelTimer.Text != "Paused") { duration = 0; duration += myQuiz.questions[questionIndex].durationMinute * 60; duration += myQuiz.questions[questionIndex].durationSecond; labelKeypadID.Text = ""; for (int i = 0; i < jumlahJawaban; i++) { arrChart[i] = 0; } } }

Pero me está dando un error como resultado:

los argumentos no válidos no se pueden convertir de Microsoft.Office.Interop.PowerPoint.Slide a Microsoft.Office.Interop.PowerPoint.Shape

El objetivo que quiero lograr es un control de formulario que pueda reproducir video cuando el usuario presiona el botón de inicio (cuenta regresiva) y no se reproduce automáticamente cuando se ejecuta la presentación.

ACTUALIZAR

Probé este. El programa puede ejecutarse sin error, pero el video aún no se está reproduciendo.

PowerPoint.Shapes objShapes = null; objShapes = oPre.Slides[1].Shapes; foreach (Microsoft.Office.Interop.PowerPoint.Shape s in objShapes) { if (s.Name.Contains(".wmv")) { s.AnimationSettings.PlaySettings.PlayOnEntry = Office.MsoTriState.msoTrue; } }

ACTUALIZACIÓN @jonPall

Probé este:

PowerPoint.Slide oSlide = null; PowerPoint.Shape objShape = null; PowerPoint.Slides oSlides = null; PowerPoint.Shapes objShapes = null; int ctrSoal = 1; oSlides = oPre.Slides; oSlide = oSlides.Add(ctrSoal, PowerPoint.PpSlideLayout.ppLayoutTextAndTwoObjects); objShapes = oPre.Slides[1].Shapes; var playVideo = oSlide.TimeLine.MainSequence.FindFirstAnimationFor(objShape); playVideo.Timing.TriggerType = PowerPoint.MsoAnimTriggerType.msoAnimTriggerWithPrevious;

Mi programa puede ejecutarse sin errores, pero cuando presiono iniciar (para reproducir el video y ejecutar el temporizador de cuenta regresiva), aparece el error

Secuencia (miembro desconocido): Valor ilegal. El objeto no existe.

ACTUALIZACIÓN @Andy

PowerPoint.Slide oSlide = null; PowerPoint.Slides oSlides = null; PowerPoint.Shapes objShapes = null; int ctrSoal = 1; oSlides = oPre.Slides; oSlide = oSlides.Add(ctrSoal, PowerPoint.PpSlideLayout.ppLayoutTextAndTwoObjects); int indexSlide = oPre.SlideShowWindow.View.Slide.SlideIndex; objShapes = oPre.Slides[indexSlide].Shapes; foreach (Microsoft.Office.Interop.PowerPoint.Shape objShape in objShapes) { string extension = Path.GetExtension(objShape.Name); if (extension == ".wmv") { //MessageBox.Show("Video Available"); var playVideo = oSlide.TimeLine.MainSequence.FindFirstAnimationFor(objShape); playVideo.Timing.TriggerType = PowerPoint.MsoAnimTriggerType.msoAnimTriggerWithPrevious; } }

con el script anterior puedo detectar si en la diapositiva activa contiene video o no
pero ~ var ~ playVideo sigue siendo nulo en la diapositiva contiene video
donde me estoy perdiendo


Prueba esto:

playVideo.Timing.TriggerType = PowerPoint.MsoAnimTriggerType.msoAnimTriggerWithPrevious;