VC++,如题,请附加代码
解决方案 »
- 搞了个WTL教程,给希望学习的人有用
- CFileFind::FindFile出错,如何解决长路径(超过256字符)问题?
- 图像背景上画线,文字的问题,急
- CListView的问题,请教了
- 界面布局问题,在线等,谢谢~~~~~~~~~~~~~~
- 100分求助代码优化,转贴http://community.csdn.net/Expert/topic/3260/3260085.xml?temp=.9195673
- 讨论一个设计模式问题——关于数据库界面数据显示的
- zhdleo
- 如何从一个mpeg文件中获取连续帧画面?
- 多CPU下的编程!!!
- 市面上有那个数据库方面的程序是VC做的,VC做数据库程序强吗?
- 对话框之间消息数据的传递
限制:因为他用的是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;
}
等找出原因在开贴,谢谢大家!