Как проверить объект PowerPoint SlideShowWindow? - PullRequest
0 голосов
/ 04 мая 2011

Я автоматизирую PowerPoint 2010 с помощью VSTO, и я хочу проверить, доступно ли 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;
}

Кажется, что где-то в объектной модели должен быть перечисление или флаг, который бы избегал такого подхода?

1 Ответ

0 голосов
/ 04 мая 2011

Не уверен, о чем идет речь об 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.

...