Mega Code Archive

 
Categories / Delphi / Activex OLE
 

Ms word file info [ doc ]

//www.dronymc.cjb.net //drony@mynet.com //icq:266148308 uses ComObj, ActiveX; const FmtID_SummaryInformation: TGUID ='{F29F85E0-4FF9-1068-AB91-08002B27B3D9}'; function FileTimeToDateTimeStr(F: TFileTime): string; var LocalFileTime: TFileTime; SystemTime: TSystemTime; DateTime: TDateTime; begin if Comp(F) = 0 then Result := '-' else begin FileTimeToLocalFileTime(F, LocalFileTime); FileTimeToSystemTime(LocalFileTime, SystemTime); with SystemTime do DateTime := EncodeDate(wYear, wMonth, wDay) + EncodeTime(wHour, wMinute, wSecond, wMilliseconds); Result := DateTimeToStr(DateTime); end; end; function GetDocInfo(const FileName: WideString): string; var I: Integer; PropSetStg: IPropertySetStorage; PropSpec: array[2..19] of TPropSpec; PropStg: IPropertyStorage; PropVariant: array[2..19] of TPropVariant; Rslt: HResult; S: string; Stg: IStorage; begin Result := ''; try OleCheck(StgOpenStorage(PWideChar(FileName), nil, STGM_READ or STGM_SHARE_DENY_WRITE, nil, 0, Stg)); PropSetStg := Stg as IPropertySetStorage; OleCheck(PropSetStg.Open(FmtID_SummaryInformation, STGM_READ or STGM_SHARE_EXCLUSIVE, PropStg)); for I := 2 to 19 do begin PropSpec[I].ulKind := PRSPEC_PROPID; PropSpec[I].PropID := I; end; Rslt := PropStg.ReadMultiple(18, @PropSpec, @PropVariant); OleCheck(Rslt); if Rslt <> S_FALSE then for I := 2 to 19 do begin S := ''; if PropVariant[I].vt = VT_LPSTR then if Assigned(PropVariant[I].pszVal) then S := PropVariant[I].pszVal; case I of 2: S := Format('Title: %s', [S]); 3: S := Format('Subject: %s', [S]); 4: S := Format('Author: %s', [S]); 5: S := Format('Keywords: %s', [S]); 6: S := Format('Comments: %s', [S]); 7: S := Format('Template: %s', [S]); 8: S := Format('Last saved by: %s', [S]); 9: S := Format('Revision number: %s', [S]); 10: S := Format('Total editing time: %g sec', [Comp(PropVariant[I].filetime) / 1.0E9]); 11: S := Format('Last printed: %s', [FileTimeToDateTimeStr(PropVariant[I].filetime)]); 12: S := Format('Create time/date: %s', [FileTimeToDateTimeStr(PropVariant[I].filetime)]); 13: S := Format('Last saved time/date: %s', [FileTimeToDateTimeStr(PropVariant[I].filetime)]); 14: S := Format('Number of pages: %d', [PropVariant[I].lVal]); 15: S := Format('Number of words: %d', [PropVariant[I].lVal]); 16: S := Format('Number of characters: %d', [PropVariant[I].lVal]); 17:; 18: S := Format('Name of creating application: %s', [S]); 19: S := Format('Security: %.8x', [PropVariant[I].lVal]); end; if S <> '' then Result := Result + S + #13; end; finally end; end; procedure TForm1.Button1Click(Sender: TObject); begin if Opendialog1.Execute then ShowMessage(GetDocInfo(opendialog1.FileName)); end;