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:
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.
On the View menu, click Toolbox to display the Toolbox and add two buttons and a list box to
Form1.
In sequence, double-click Button1, Button2, and Form1.
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("914934C2-5A91-11CF-8700-00AA0060263B")
' 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("WindowSelectionChange")
End Sub
<DispId(2002)> Public Sub WindowBeforeRightClick(ByVal Sel As PowerPoint.Selection,
ByVal Cancel As Boolean)
Me.ListBox1.Items.Add("WindowBeforeRightClick")
End Sub
<DispId(2003)> Public Sub WindowBeforeDoubleClick(ByVal Sel As PowerPoint.Selection,
ByVal Cancel As Boolean)
Me.ListBox1.Items.Add("WindowBeforeDoubleClick")
End Sub
<DispId(2004)> Public Sub PresentationClose(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("PresentationClose")
End Sub
<DispId(2005)> Public Sub PresentationSave(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("PresentationSave")
End Sub
<DispId(2006)> Public Sub PresentationOpen(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("PresentationOpen")
End Sub
<DispId(2007)> Public Sub NewPresentation(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("NewPresentation")
End Sub
<DispId(2008)> Public Sub PresentationNewSlide(ByVal Sld As PowerPoint.Slide)
Me.ListBox1.Items.Add("PresentationNewSlide")
End Sub
<DispId(2009)> Public Sub WindowActivate(ByVal Pres As PowerPoint.Presentation,
ByVal Wn As PowerPoint.DocumentWindow)
Me.ListBox1.Items.Add("WindowActivate")
End Sub
<DispId(2010)> Public Sub WindowDeactivate(ByVal Pres As PowerPoint.Presentation,
ByVal Wn As PowerPoint.DocumentWindow)
Me.ListBox1.Items.Add("WindowDeactivate")
End Sub
<DispId(2011)> Public Sub SlideShowBegin(ByVal Wn As PowerPoint.SlideShowWindow)
Me.ListBox1.Items.Add("SlideShowBegin")
End Sub
<DispId(2012)> Public Sub SlideShowNextBuild(ByVal Wn As PowerPoint.SlideShowWindow)
Me.ListBox1.Items.Add("SlideShowNextBuild")
End Sub
<DispId(2013)> Public Sub SlideShowNextSlide(ByVal Wn As PowerPoint.SlideShowWindow)
Me.ListBox1.Items.Add("SlideShowNextSlide")
End Sub
<DispId(2014)> Public Sub SlideShowEnd(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("SlideShowEnd")
End Sub
<DispId(2015)> Public Sub PresentationPrint(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("PresentationPrint")
End Sub
<DispId(2016)> Public Sub SlideSelectionChanged(ByVal SldRange As PowerPoint.SlideRange)
Me.ListBox1.Items.Add("SlideSelectionChanged")
End Sub
<DispId(2017)> Public Sub ColorSchemeChanged(ByVal SldRange As PowerPoint.SlideRange)
Me.ListBox1.Items.Add("ColorSchemeChanged")
End Sub
<DispId(2018)> Public Sub PresentationBeforeSave(ByVal Pres As PowerPoint.Presentation,
ByVal Cancel As Boolean)
Me.ListBox1.Items.Add("PresentationBeforeSave")
End Sub
<DispId(2019)> Public Sub SlideShowNextClick(ByVal Wn As PowerPoint.SlideShowWindow,
ByVal nEffect As PowerPoint.Effect)
Me.ListBox1.Items.Add("SlideShowNextClick")
End Sub
Add the following to the Imports section at the top of the
code window: