Red de conocimiento informático - Material del sitio web - Cómo consultar el DISPID de eventos de oficina

Cómo consultar el DISPID de eventos de oficina

Hoy estoy muy feliz y finalmente aprendí a capturar eventos de Microsoft Office PowerPoint. Escríbelo y compártelo con todos. Descubrí que hay pocos artículos originales en Internet y muchos artículos reimpresos, por lo que haré algunas contribuciones a la originalidad.

Este artículo toma PPT como ejemplo. Sus principios deben ser aplicables a WORD y EXCEL. Se supone que el lector tiene alguna base en el uso de ATL para desarrollar complementos de OFFICE (o COM). Los llamados eventos en PPT se refieren a SlideShowBegin (inicio de la reproducción), SlideShowEnd (finalización de la reproducción), etc. Los nombres y significados de todos los eventos se pueden encontrar en el capítulo de ayuda de VBA de PPT.

El entorno de prueba del autor es VC6.0 y utiliza el marco ATL. El marco de software básico para las pruebas utiliza el código fuente en "Desarrollo de complementos PowerPoint2K / XP" de Xu Jingzhou (estoy muy agradecido con este experto, el código y los artículos me han brindado mucha ayuda). Los artículos se pueden encontrar en www.vckbase. Se encuentran en .com. Aquí se omiten los detalles relacionados con el desarrollo de complementos.

De hecho, la tecnología es solo una capa de papel, muy simple. No voy a explicarla en detalle aquí, pero sí hablaré de algunos puntos clave. De hecho, después de analizar cuidadosamente el código del evento de clic en el botón personalizado, me di cuenta de la captura del evento de reproducción PPT después de una mañana de pruebas. Lo principal es agregar algo de código en algunos lugares.

1. Hacer que la clase de complemento herede IDispEventSimpleImpl público<11/*Número positivo no repetido personalizado*/, CPowerPoint2000Addin, &__uuidof(MSPPT::EApplication)>

Defina un escape :typedef IDispEventSimpleImpl PPTEvents;

2. , seguido de Es el valor de retorno, número y tipo de parámetros)

_ATL_FUNC_INFO OnPPTEventInfo = {CC_STDCALL,VT_EMPTY,1,{VT_DISPATCH}};

3. p>

BEGIN_SINK_MAP(CPowerPoint2000Addin)

//SINK_ENTRY_INFO(1,__uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 0x01,OnClickButton1, &OnClickButtonInfo)

SINK_ENTRY_INFO( 11,__uuidof( MSPPT::EApplication),/*dispid*/ 2011,SlideShowBegin, &OnPPTEventInfo)//2011, DISPID, que se puede encontrar en MSDN

END_SINK_MAP()

Otro DISPID

2001 WindowSelectionChange

2002 WindowBeforeRightClick

2003 WindowBeforeDoubleClick

2004 PresentaciónCerrar

2005 PresentaciónGuardar

2006 PresentaciónAbrir

2007 NuevaPresentación

2008 PresentaciónNuevaDiapositiva

2009 VentanaActivar

2010 VentanaDesactivar

2011 SlideShowBegin

2012 SlideShowNextBuild

2013 SlideShowNextSlide

2014 SlideShowEnd

2015 PresentationPrint

2016 SlideSelectionChanged x

2017 ColorSchemeChanged x

2018 PresentationBeforeSave x

2019 SlideShowNextClick x

4. Declarar eventos

void __stdcall SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn );

Implementar eventos

void __stdc

todo CPowerPoint2000Addin::SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn )

{

MessageBox(NULL, "SlideShowBegin", "SlideShowBegin" , MB_OK);

// return S_OK;

}

5. Activar el nuevo punto de conexión del evento

hr = PPTEvents::DispEventAdvise((IDispatch* ) m_spApp);

if(FAILED(hr)){

//MessageBox(NULL, "FAILED", "FIELED", MB_OK);

}

Eso es todo. Puedes hacer clic en el botón de reproducción de PPT para ver el efecto y si aparece tu propio cuadro de diálogo. Consejo: no olvide desconectar el evento del punto de conexión recién agregado cuando se desinstale el complemento. Al depurar, no olvide cambiar la biblioteca de OFFICE a la ruta y versión correspondientes de la biblioteca en su propia máquina.

Descargue todos los códigos fuente de mi disco duro de red ( ). Para obtener más información, visite mi blog (/wallimn)

.