如何测试幻灯片演示窗口对象

本文关键字:窗口 对象 幻灯片 何测试 测试 | 更新日期: 2023-09-27 17:54:46

我正在使用VSTO自动化PowerPoint 2010,我想在调用方法之前检查SlideShowWindow是否可用。

此刻,我正在捕捉访问时返回的COMException;

Globals.ThisAddIn.Application.ActivePresentation.SlideShowWindow

完整方法是;

private SlideShowWindow GetSlideShowWindow()
{
    //attempt to get the running slide show window...
    SlideShowWindow slideShowWindow = null;
    try
    {
        //try to access the COM wrapper...
        slideShowWindow = Globals.ThisAddIn.Application.ActivePresentation.SlideShowWindow;
    }
    catch (COMException)
    {
        //window doesn't exist!...
    }
    //return window or null...
    return slideShowWindow;
}

似乎应该在对象模型的某个地方有一个枚举或标志来避免这种方法?

如何测试幻灯片演示窗口对象

不确定关于Open XML的评论是关于什么的,那是一个未呈现的内容操作工具。你要做的事情被正确地认为是由对象模型编程的。

我会这样做:

Public Sub SeeIfAShowIsRunning()
    If SlideShowWindows.Count > 0 Then
        Debug.Print "yep, something is there. Let me check further."
        If SlideShowWindows.Count > 1 Then
        Debug.Print "uh huh, there are " & SlideShowWindows.Count & " shows running"
        Debug.Print "hold on, i'll figure this out for you"
            For i = 1 To SlideShowWindows.Count
                If ActivePresentation.Name = Presentations.Item(i).Name Then
                    Debug.Print "i found you. your name is: " & ActivePresentation.Name
                Else
                    Debug.Print Presentations.Item(i).Name & " is a fine pptx, but not the one i want"
                End If
            Next
        End If
    Else
        Debug.Print "nope, you're in editing mode"
    End If
End Sub

这将在所有版本的PowerPoint中工作。在PowerPoint 2010中,从技术上讲,你可以有多个幻灯片放映窗口运行,但其中只有一个是活动的,所以我会做一个进一步的搜索活动的一个,得到它的.Presentation,如果它匹配ActivePresentation,那么它是你的ActivePresentation的幻灯片播放正在运行,就像上面一样。

如果您使用的是PowerPoint 2007或以下版本,那么这不是问题,您可以删除If SlideShowWindows.Count > 1 Then语句。

以下代码行检查SlideShowWindow对象是否激活,如果不是,则激活它。

set objWindow = ActivePresentation.SlideShowWindow 
If objWindow.Active = msoFalse Then
    objWindow.Activate
End If