查看是否有已经打开的Word对象

//--------------------------------------------------------------------------
//  在VS2005下运行
 // 查看是否有已经打开的Word对象

    BOOL                bIsNewCreate    ;
    bIsNewCreate    = FALSE            ;

  COleVariant        vTrue((short)TRUE), 
                         vFalse((short)FALSE), 
                         covOptional((long)DISP_E_PARAMNOTFOUND,   VT_ERROR);// 缺省对象

    CComVariant        tpl(lpszFilePath),
                             NewTemplate(false),
                             DocType(0),
                            Visble;

    CComVariant        SaveChanges(false),
                            OriginalFormat,
                            RouteDocument;
   
    CApplication        oWordApp    ;
    CDocuments        oDocs        ;
    CDocument0        oDoc        ; 


        HRESULT                hr            ;
    IUnknown            *pUnk        ;
    IDispatch            *pDisp        ;
    CLSID                clsid        ;

    rVal            = RC_SUCCESS                ;
    bIsNewCreate    = FALSE                        ;
    enmFileCodeSet    = CResConst::CodeSetUncide    ;

    //------------------------------------------------------------------------------------
    // 查看是否有已经打开的Word对象

    hr = CoInitialize( NULL );

    //ASSERT( !FAILED(hr) );
    if( FAILED(hr) ){
        AfxMessageBox( TEXT( "failed   to   call   CoInitialize()" ));
    }

    CLSIDFromProgID( TEXT( "Word.Application" ),   &clsid );
 
    // 查看是否有已经打开的Word对象
    hr = GetActiveObject( clsid,   NULL,   (IUnknown**)&pUnk );
 
    // 若有word在运行,就得到当前运行word的实例
    if ( !FAILED(hr) ){
     
        hr = pUnk->QueryInterface( IID_IDispatch,  (void   **)&pDisp );
        ASSERT( !FAILED(hr) );

        oWordApp.AttachDispatch( pDisp, TRUE );

        pUnk -> Release();
   
 
    }
    // 若无,则新建一个Word对象
    else {
     
        if ( !oWordApp.CreateDispatch( TEXT( "Word.Application" ),NULL) ){

            AfxMessageBox( TEXT( "创建ms_word对象失败" ) );
            //rVal = RC_CANCELED_BY_USER ;
            //goto PROC_END ;

        }
        else {
            // 新创建的word实例标志
            bIsNewCreate = TRUE;
        }
    }
    //-------------------------------------------------------------------------------
    // 创建文档
    oDocs.AttachDispatch(  oWordApp.get_Documents() ); 

    // 打开一个新文档,将文件的内容添加到新文档中
    oDoc.AttachDispatch(  oDocs.Add( &tpl , &NewTemplate , &DocType , &Visble ) );

     //===================================
    // 其他处理word文件的代码
    //=====================================
  
     oDoc.Close( covFalse , covOptional , covOptional);// vFalse若为vTrue,则新文档不能关闭 

    //oWordApp.Quit( vFalse, &OriginalFormat, &RouteDocument ); // 若直接用此方法关闭word,则用户打开的word也被关闭了
   
    // 如果是新创建的word,就关闭
    if( TRUE == bIsNewCreate ){

        oWordApp.Quit( covFalse, &OriginalFormat, &RouteDocument );
        oWordApp.ReleaseDispatch();
    }
    //-------------------------------------------------------------------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值