Microsoft KB Archive/308330

= How to handle PowerPoint 2002 events by using Visual Basic .NET 2002 =

Article ID: 308330

Article Last Modified on 1/30/2007

-

APPLIES TO


 * Microsoft PowerPoint 2002 Standard Edition
 * Microsoft Visual Basic .NET 2002 Standard Edition

-



This article was previously published under Q308330



For a Microsoft Visual C# .NET version of this article, see 308825.

For a Microsoft Visual C++ .NET version of this article, see 309309.



SUMMARY
This article describes how to handle Microsoft PowerPoint 2002 events by using Microsoft Visual Basic .NET 2002.



MORE INFORMATION
With Microsoft Visual Studio .NET, you cannot use delegates to sink events with PowerPoint. PowerPoint uses the IDispatch interface to fire events. To correctly sink the events, the Visual Basic .NET application must use the IConnectionPointContainer and IConnectionPoint interfaces. The receiving application must also know the DISPIDs of the events to sink. These DISPIDs are not listed in PowerPoint's type library, but are listed in the sample code below for reference.

Create the Sample Visual Basic .NET Automation Client
 Start Microsoft Visual Studio .NET. On the File menu, click New and then click Project. Under Project types click Visual Basic Projects, then click Windows Application under Templates. Form1 is created by default. Add a reference to the Microsoft PowerPoint Object Library. To do this, follow these steps:  On the Project menu, click Add Reference. On the COM tab, locate Microsoft PowerPoint 10.0 Object Library, and then click Select.NOTE: If you have not already done so, it is recommended that you download, and then install the Microsoft Office XP Primary Interop Assemblies (PIAs). For additional information about Office XP PIAs, click the article number below to view the article in the Microsoft Knowledge Base:

328912 INFO: Microsoft Office XP PIAs Are Available for Download

 Click OK in the Add References dialog box to accept your selection. If you receive a prompt to generate wrappers for the libraries you selected, click Yes. </li> On the View menu, click Toolbox to display the Toolbox and add two buttons and a list box to Form1.</li> In sequence, double-click Button1, Button2, and Form1.</li>  In the code window, replace the following code Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub with: Private m_oConnectionPoint As UCOMIConnectionPoint Private m_Cookie As Integer Private oPPT As PowerPoint.Application

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Create a new instance of PowerPoint. oPPT = New PowerPoint.Application

' Show PowerPoint to the user. oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Call Unadvise to remove the sink to the connection. m_oConnectionPoint.Unadvise(m_Cookie) System.Runtime.InteropServices.Marshal.ReleaseComObject(oPPT) GC.Collect End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim oConnPointContainer As UCOMIConnectionPointContainer ' QI for IConnectionPointContainer. oConnPointContainer = CType(oPPT, UCOMIConnectionPointContainer) ' Create a new variable that contains the GUID of the ' PowerPoint.EApplication interface. Dim guid As New Guid(&quot;914934C2-5A91-11CF-8700-00AA0060263B&quot;) ' Find the connection point. oConnPointContainer.FindConnectionPoint(guid, m_oConnectionPoint) ' Call Advise to sink up the connection. m_oConnectionPoint.Advise(Me, m_Cookie) End Sub

<DispId(2001)> Public Sub WindowSelectionChange(ByVal Sel As PowerPoint.Selection) Me.ListBox1.Items.Add(&quot;WindowSelectionChange&quot;) End Sub

<DispId(2002)> Public Sub WindowBeforeRightClick(ByVal Sel As PowerPoint.Selection,                                                              ByVal Cancel As Boolean) Me.ListBox1.Items.Add(&quot;WindowBeforeRightClick&quot;) End Sub

<DispId(2003)> Public Sub WindowBeforeDoubleClick(ByVal Sel As PowerPoint.Selection,                                                               ByVal Cancel As Boolean) Me.ListBox1.Items.Add(&quot;WindowBeforeDoubleClick&quot;) End Sub

<DispId(2004)> Public Sub PresentationClose(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add(&quot;PresentationClose&quot;) End Sub

<DispId(2005)> Public Sub PresentationSave(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add(&quot;PresentationSave&quot;) End Sub

<DispId(2006)> Public Sub PresentationOpen(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add(&quot;PresentationOpen&quot;) End Sub

<DispId(2007)> Public Sub NewPresentation(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add(&quot;NewPresentation&quot;) End Sub

<DispId(2008)> Public Sub PresentationNewSlide(ByVal Sld As PowerPoint.Slide) Me.ListBox1.Items.Add(&quot;PresentationNewSlide&quot;) End Sub

<DispId(2009)> Public Sub WindowActivate(ByVal Pres As PowerPoint.Presentation,                                            ByVal Wn As PowerPoint.DocumentWindow) Me.ListBox1.Items.Add(&quot;WindowActivate&quot;) End Sub

<DispId(2010)> Public Sub WindowDeactivate(ByVal Pres As PowerPoint.Presentation,                                              ByVal Wn As PowerPoint.DocumentWindow) Me.ListBox1.Items.Add(&quot;WindowDeactivate&quot;) End Sub

<DispId(2011)> Public Sub SlideShowBegin(ByVal Wn As PowerPoint.SlideShowWindow) Me.ListBox1.Items.Add(&quot;SlideShowBegin&quot;) End Sub

<DispId(2012)> Public Sub SlideShowNextBuild(ByVal Wn As PowerPoint.SlideShowWindow) Me.ListBox1.Items.Add(&quot;SlideShowNextBuild&quot;) End Sub

<DispId(2013)> Public Sub SlideShowNextSlide(ByVal Wn As PowerPoint.SlideShowWindow) Me.ListBox1.Items.Add(&quot;SlideShowNextSlide&quot;) End Sub

<DispId(2014)> Public Sub SlideShowEnd(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add(&quot;SlideShowEnd&quot;) End Sub

<DispId(2015)> Public Sub PresentationPrint(ByVal Pres As PowerPoint.Presentation) Me.ListBox1.Items.Add(&quot;PresentationPrint&quot;) End Sub

<DispId(2016)> Public Sub SlideSelectionChanged(ByVal SldRange As PowerPoint.SlideRange) Me.ListBox1.Items.Add(&quot;SlideSelectionChanged&quot;) End Sub

<DispId(2017)> Public Sub ColorSchemeChanged(ByVal SldRange As PowerPoint.SlideRange) Me.ListBox1.Items.Add(&quot;ColorSchemeChanged&quot;) End Sub

<DispId(2018)> Public Sub PresentationBeforeSave(ByVal Pres As PowerPoint.Presentation,                                                                  ByVal Cancel As Boolean) Me.ListBox1.Items.Add(&quot;PresentationBeforeSave&quot;) End Sub

<DispId(2019)> Public Sub SlideShowNextClick(ByVal Wn As PowerPoint.SlideShowWindow,                                                    ByVal nEffect As PowerPoint.Effect) Me.ListBox1.Items.Add(&quot;SlideShowNextClick&quot;) End Sub </li>  Add the following to the Imports section at the top of the code window: Imports System.Runtime.InteropServices Imports Microsoft.Office.Interop </li> Test the program. To do this, follow these steps:  Press F5 to build and run the program. PowerPoint is started.</li> Click Button1 to set up the event sinks.</li> Create a new presentation in PowerPoint.

The WindowActivate, NewPresentation, PresentationNewSlide and WindowSelectionChange events fire.</li> Save the presentation.

The PresentationSave event fires.</li> Close the presentation.

The PresentationClose event fires.</li> Activate Form1 in the program. The events that were triggered by PowerPoint and handled by the program appear in the list box.</li> Click Button2 to disconnect the event sinks.</li> Close Form1.</li></ol> </li></ol>

<div class="references_section">