1、我做出来的插件在WORD第1个实例启动的时候,方法OnConnection、OnAddInsUpdate、OnStartupComplete都会被调用,但是启动第2个WORD实例或更多的时候一个方法都没有被调用呢????关闭的时候相反,当剩最后1个实例(这个实例不管什么时候被开启的)关闭的时候才调用OnBeginShutdown、OnDisconnection。
我想每个实例打开和关闭的时候都能被插件截获到并处理,请问怎么做呢?
2、插件被激活的时候怎样得到当前WORD的_Application变量呢?

解决方案 »

  1.   

    1.你可以捕获Word实例的获得焦点和失去焦点事件,好像是OnWndActivate和OnWndDeactivate.在获得焦点事件里重新加载插件,在失去焦点事件时,卸载插件就可以实现了.
    2.STDMETHODIMP CWordAddin::OnConnection(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)
    {
    CComQIPtr < MSWord::_Application > spApp(Application);
    CComPtr< MSWord::_Application > m_spApp m_spApp = spApp;}
      

  2.   

    感谢sunmz_wjxy,第2个问题解决,但第1个问题怎么解决啊~~~
    我现在程序里面只有5个方法,OnConnection、OnAddInsUpdate、OnStartupComplete、OnBeginShutdown、OnDisconnection
    还有总觉得用焦点来重新加载插件有点不正规呢
      

  3.   

    你是怎么判断你的OnConnection等只被调用了一次?按理每次启动一个word实例都会再启动一个独立的插件的。
    Application是在OnConnection中传入的,你应该保存下来。
      

  4.   

    1.你可以捕获Word实例的获得焦点和失去焦点事件,好像是OnWndActivate和OnWndDeactivate.在获得焦点事件里重新加载插件,在失去焦点事件时,卸载插件就可以实现了. 上面就是我实现的方案,可能不是很好,但可以办到.
      

  5.   

    我在OnConnection等每个方法里面都加了MessageBox,OnWndActivate和OnWndDeactivate是从哪来的方法?
      

  6.   

    我做过office的插件,插件每次被加载都会触发插件的OnConnection,application对象就是这时传入的。如果OnConnection没有触发,就说明word的实例没有加载插件
      

  7.   

    OnWndActivate和OnWndDeactivate是从哪来的方法?
    这两个是Word应用程序对外抛的事件.