如何判断一个word文件是否加密?(50分)

  • 主题发起人 主题发起人 maozhuxi
  • 开始时间 开始时间
M

maozhuxi

Unregistered / Unconfirmed
GUEST, unregistred user!
如何判断一个word文件是否加密?
我有很多word文件要处理,但是不处理加密过的word
请问如何判断?
如何判断鼠标是否在richedit里面?
 
procedure TForm1.Button1Click(Sender: TObject);
var
wordapp,doc,table:variant;
begin
wordapp:=createoleobject('word.application');
wordapp.visible:=true;
wordapp.documents.open(getcurrentdir+'/temp.doc');
doc:=wordapp.activedocument;

if doc.HasPassword =true then
begin
showmessage('has psw');
wordapp.quit;
end
else
begin
showmessage('has no psw');
end;
end;

我本来是想有密码的doc就不打开,但是上面的代码也不能实现,
因为if doc.HasPassword =true then这个判断必须在word打开的情况下,所以变的这个[判断没有意义了.
请问如何才能实现.
 
估计是没法,你可不可以这样处理,用个try语句,打开word文件时,能被正常打开那就说明没密码了,那就接着处理其他,如果有密码的话,估计是会打不开,那么就不处理它了.
 
使用CreateOleObject方法对WORD文档操作具有先天所具备的优势,与delphi所提供的那些控件方式的访问相比,CreateOleObject方法距离WORD核心的操作“更近”,因为它直接使用OFFICE所提供的VBA语言对WORD文档的操作进行编程。

《在Delphi中使用CreateOleObject方法对WORD文件进行操作》
http://www.xren.net/program/5949.html
 
谢谢,但是上面不是我需要的哈。
 
你要搞什么的吗?搞应用,还是写论文?

深邃眼眸 说的间接方法不行吗?
 
to 深邃眼眸,try 的 办法不行,因为
try
wordapp.documents.open(getcurrentdir+'/temp.doc');//这里还是必须要打开,同样卡在这里。
except
showmessage('a');
end;

to hupo99:我就是写个自用的程序。我有几千个word文件处理,但是加密的文件是不能处理,我也不知道密码,所以处理到这些加密的文件时就会卡在这里,要输入密码,或者点取消才能跳过,程序才能继续,问题就出来了,这个处理的时间比较长数个小时,要是一直看着程序,看见有密码的点取消,而且这些卡住的时间是在这数个小时随时都会出现,这就比较麻烦,我的意思就是想跳过这些带密码的word,一次将程序执行完毕,谁能想想办法,谢谢!
 
等周末有空我试试看.现在好忙啊
 
to 深邃眼眸:
谢谢了。
 
网上有 ms 发布的 doc 文件说明,下一个看看吧:
Word97-2007BinaryFileFormat(doc)Specification.pdf
 
try可以,你把
wordapp.documents.open(getcurrentdir+'/temp.doc');
这句改成如下带参数打开,密码随便填一个,然后捕捉异常,如果打开失败就退出,打开成功则继续,这样就不会出现密码提示框了!
当然这是一个取巧的办法,如果大家还有更好的办法可以拿出来继续讨论!

try
wordapp.documents.open(getcurrentdir+'/temp.doc',False ,
True , False , 'testpwd','',
False , '', '', 0);
except
//ShowMessage('error');
wordapp.quit;
Exit;
end;


'testpwd'为自己填入的密码
 
《在Delphi中使用CreateOleObject方法对WORD文件进行操作》
http://www.xren.net/program/5949.html

里面也有判断doc是否打开,而且可以返回 ture 或 false ,
用这个返回就可以执行你要的 代码
 
后退
顶部