delphi - Checking if the file is in use and by which application? -
trying utilize below mentioned approach more details locked file.
is file in use
function getfileinuseinfo(const filename : widestring) : ifileisinuse; var rot : irunningobjecttable; mfile, enumindex, prefix : imoniker; enummoniker : ienummoniker; monikertype : longint; unkint : iinterface; begin result := nil; olecheck(getrunningobjecttable(0, rot)); olecheck(createfilemoniker(pwidechar(filename), mfile)); olecheck(rot.enumrunning(enummoniker)); while (enummoniker.next(1, enumindex, nil) = s_ok) begin olecheck(enumindex.issystemmoniker(monikertype)); if monikertype = mksys_filemoniker begin if succeeded(mfile.commonprefixwith(enumindex, prefix)) , (mfile.isequal(prefix) = s_ok) begin if succeeded(rot.getobject(enumindex, unkint)) begin if succeeded(unkint.queryinterface(iid_ifileisinuse, result)) begin result := unkint ifileisinuse; exit; end; end; end; end; end; end; but phone call
unkint.queryinterface(iid_ifileisinuse, result) always returns e_nointerface.
platform: windows 7 32 bit-os, opening word files , .msg files.
checked opening files explorer , trying delete. shows proper details application in file opened. in application, seek display info application in file opened. when trying cast pointer ifileisinuse interface, queryinterface calls fails homecoming code e_nointerface means object in rot not implement ifileisinuse. afasik, ms office files implements ifileisinuse
any thought wrong here?
in fact code works fine. problem programs testing against not implement ifileisinuse. when scheme returns e_nointerface accurate. interface not implemented.
i tested file in utilize sample sdk. files added rot application, implement ifileisinuse, picked code. on other hand, files opened acrobat 8 , word 2010 not.
the conclusion draw ifileisinuse fine thought in principle, not much utilize if applications don't back upwards it. , appears there major applications not.
it clear need utilize 1 or more of other mechanisms observe application has file locked when find ifileisinuse not implemented.
delphi delphi-2009 windows-api-code-pack
No comments:
Post a Comment