VC++,如题,请附加代码

解决方案 »

  1.   

    LZ的要求说的不是很清楚啊,检测的加密是WORD软件中设置的加密?记得好像在二进制下有个加密标志位,检测一下就知道了。
      

  2.   

    对的,是WORD软件中设置的加密!!
      

  3.   

    Document有三个属性你需要关注:HasPassword/Password/WritePassword,第一个就能判断文档是否加密了,第二个用来设置文档打开密码,第三个用来设置文档编辑密码
      

  4.   

    如jameshooo判断HasPassword就可以
      

  5.   

    不好意思,是不是还要导入com组件,该如何导入呢,再请教!我可能就是不知道大侠们认为很简单的问题,所以:请再详细一点,帮到底吧!
      

  6.   

    其实,我很想结贴了,但问题还没结束!china_bai兄已经把他做的小项目的源码给我了,谢的非常好!但有个
    限制:因为他用的是office的组件,所以必须装有office才行!同时效率也受到影响!但在此我还是要非常感谢
    china_bai兄,他耐心的教了我很多东西!其实还有另一种方法:其实word采用的多层次的文档结构,用VC6.0
    自带的DocFile Viewer打开一个word文件,就可以看见分为5-6层,每一层都是有特定的文件流组成。在这些流
    中,有一个属性叫file_encrypted,他可以判断文档是否被加密下面是代码,在vc2003中能通过,在vc2005中没同
    通过,郁闷!
    #include "stdafx.h"
    #include <ATLBASE.H>UINT _JudgeFile_word(LPTSTR szFilePath)
    {
    LPSTORAGE pStgRoot;
    LPSTREAM  pMainStream;
        USES_CONNVERSION; ::StgOpenStorage(T2COLE(szFilePath),
    NULL,
    STGM_READ | STGM_SHARE_DENY_WRITE,
    NULL,
    0,
    &pStgRoot); if(pStgRoot->OpenStream(T2W("Word Document"),
    NULL,
    STGM_READ | STG_SHARE_EXCLUSIVE,
    0,
    &pMainStream) != S_OK )
    {
    pStgRoot->Release();
    }
    //确定是否加密
    char pTmp[20];
    if(S_OK != pMainStream->Read(pTmp,20,NULL))
    {
    pMainStream->Release();
    pStgRoot->Release();
    } unsigned short sTmp;
    memcpy(&sTmp, pTmp+10,2);
    if((sTmp & 0x0100) != 0)
    {
    pMainStream->Release();
    pStgRoot->Release();
    printf("The file has been encrypted!");
    getchar();
    return 0;
    }
        
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    HANDLE hFile;
    _JudgeFile_word("c:\\encrypt.doc");
    return 0;
    }
    等找出原因在开贴,谢谢大家!