关于如何在VC中操作Word,以判断文档是否加密

问题:怎样判断word是否被加密?是WORD软件中设置的加密 。

这个问题涉及到如何通过VC调用office的组件库,进而实现操作Word的问题。其实如果是在VB或者VBA里面进行调用,会比较的容易,使用VC相对的麻烦些。这和ADO是一样的,在VB里面调用很容易,结构清晰,在VC里面调用就复杂好多。

具体的解决分下面几步:

1、在VC中引入office组件库,把下面的代码放入到stdafx.h中:

#import  " C:Program Filescommon filesmicrosoft sharedoffice11MSO.dll "  
    rename(
" RGB " " RGBEx "
    rename(
" EOF " " msoEOF " )

using   namespace  Office;

#import 
" C:Program FilesCommon FilesMicrosoft SharedVBAVBA6VBE6EXT.OLB "

#import 
" C:Program FilesMicrosoft OfficeOFFICE11MSWORD.OLB "   
    rename(
" ExitWindows " , " ExitWindowsEx "
    rename(
" FindText " " FindTextEx " )

using   namespace  Word;

2、初始化COM库:

CoInitialize(NULL);
....  ....


CoUninitialize();

3、利用office组件库中提供的对象,打开一个word文档,并判断是否加密(即是否设置了密码):

    _ApplicationPtr   app; 
    _DocumentPtr doc;

    app.CreateInstance(__uuidof(Application));
    doc.CreateInstance(__uuidof(Document));

    app
-> Visible  =  VARIANT_TRUE; 

    COleVariant v1(
" c:/1.doc " );  //此处为要打开的文档名字
    COleVariant password(
"   " );

    
try {
        
        doc 
= app->Documents->Open(v1, &vtMissing, &vtMissing, &vtMissing,
        password,
        
&vtMissing,
        
&vtMissing,
        password,
        
&vtMissing);

        
if (app-> ActiveDocument-> HasPassword == VARIANT_FALSE) 
        

            AfxMessageBox(
"该文件未加密。");
        }
 
    }

    
catch (_com_error  & e)
    
{
        AfxMessageBox(
"该文件已经加密,无法打开。"); 
    }

    

    VARIANT SaveChanges,OriginalFormat,RouteDocument;    
    SaveChanges.vt
= VT_BOOL;                
    SaveChanges.boolVal
= VARIANT_FALSE;    

    ::VariantInit(
& OriginalFormat);        
    RouteDocument.vt
= VT_EMPTY;            
    
    doc.Release();

    app
-> Quit( & SaveChanges, & OriginalFormat, & RouteDocument);
    app.Release();

这里只有一个要点:默认的密码设置为一个空格,如果能正常打开文档,则该文档没有设置密码。否则,在打开的过程中会出错,则在错误处理中,判断出该文档设置了密码。

 

你可能感兴趣的:(.NET开发,文档,加密,office,application,vb,vba)