どこでだったかは忘れたけれども、ID3タグを取得しようと関連情報をネットで探していたら、マイクロソフト製の
dsofile.dll というものがあることを知りました。
なんでもこれを利用すればファイルのプロパティを読み込めるだけでなく書き込みもできるのだとか。
mp3infp.dll ではなし得なかったUnicode文字への完全対応もこれならできるのではないだろうか?という期待もこめて、よし一発試してみるか!
というページ。
あとはコンポーネントパレットのActiveXのところにある「OleDocumentProperties」をフォームに貼り付ければDelphiが自動でuses節に必要となる OleServer と DSOFile_TLB を付け足してくれます。
そして CreateOleObject関数 を使えるように uses節に ComObj を書き加えて準備完了となります。
procedure TForm1.Test1Click(Sender: TObject);
var
objFile: OleVariant;
ls_WFile:
WideString;
begin
if (
gfnbOpenFileDialog(ls_WFile, '', Handle))
then begin
objFile := CreateOleObject('DSOFile.OleDocumentProperties');
objFile.Open(ls_WFile);
myDebug.gpcDebugAdd('Application name: ',
WideString(objFile.SummaryProperties.ApplicationName));
myDebug.gpcDebugAdd('Author: ',
WideString(objFile.SummaryProperties.Author));
myDebug.gpcDebugAdd('Byte count: ',
WideString(objFile.SummaryProperties.ByteCount));
myDebug.gpcDebugAdd('Category: ',
WideString(objFile.SummaryProperties.Category));
myDebug.gpcDebugAdd('Character count: ',
WideString(objFile.SummaryProperties.CharacterCount));
myDebug.gpcDebugAdd('Character count
with spaces: ',
WideString(objFile.SummaryProperties.CharacterCountWithSpaces));
myDebug.gpcDebugAdd('Comments: ',
WideString(objFile.SummaryProperties.Comments));
myDebug.gpcDebugAdd('Company: ',
WideString(objFile.SummaryProperties.Company));
myDebug.gpcDebugAdd('Date created: ',
WideString(objFile.SummaryProperties.DateCreated));
myDebug.gpcDebugAdd('Date last printed: ',
WideString(objFile.SummaryProperties.DateLastPrinted));
myDebug.gpcDebugAdd('Date last saved: ',
WideString(objFile.SummaryProperties.DateLastSaved));
myDebug.gpcDebugAdd('Hidden slide count: ',
WideString(objFile.SummaryProperties.HiddenSlideCount));
myDebug.gpcDebugAdd('Keywords: ',
WideString(objFile.SummaryProperties.Keywords));
myDebug.gpcDebugAdd('Last saved by: ',
WideString(objFile.SummaryProperties.LastSavedBy));
myDebug.gpcDebugAdd('Line count: ',
WideString(objFile.SummaryProperties.LineCount));
myDebug.gpcDebugAdd('Manager: ',
WideString(objFile.SummaryProperties.Manager));
myDebug.gpcDebugAdd('Multimedia clip count: ',
WideString(objFile.SummaryProperties.MultimediaClipCount));
myDebug.gpcDebugAdd('Note count: ',
WideString(objFile.SummaryProperties.NoteCount));
myDebug.gpcDebugAdd('Page count: ',
WideString(objFile.SummaryProperties.PageCount));
myDebug.gpcDebugAdd('Paragraph count: ',
WideString(objFile.SummaryProperties.ParagraphCount));
myDebug.gpcDebugAdd('Presentation format: ',
WideString(objFile.SummaryProperties.PresentationFormat));
myDebug.gpcDebugAdd('Revision number: ',
WideString(objFile.SummaryProperties.RevisionNumber));
myDebug.gpcDebugAdd('Shared document: ',
WideString(objFile.SummaryProperties.SharedDocument));
myDebug.gpcDebugAdd('Slide count: ',
WideString(objFile.SummaryProperties.SlideCount));
myDebug.gpcDebugAdd('Subject: ',
WideString(objFile.SummaryProperties.Subject));
myDebug.gpcDebugAdd('Template: ',
WideString(objFile.SummaryProperties.Template));
myDebug.gpcDebugAdd('Title: ',
WideString(objFile.SummaryProperties.Title));
myDebug.gpcDebugAdd('Total edit time: ',
WideString(objFile.SummaryProperties.TotalEditTime));
myDebug.gpcDebugAdd('Version: ',
WideString(objFile.SummaryProperties.Version));
myDebug.gpcDebugAdd('Word count: ',
WideString(objFile.SummaryProperties.WordCount));
objFile.Close;
end;
end;
もしかして↑では objFile.SummaryProperties.ApplicationName みたいにやってるけどもこの
SummaryProperties にもっと色々な情報を取得できる方法があるのかも、、?
と、思いソースコード眺めてみたけれどどうもなさそう。CustomPropertyプロパティ使ってforループまわしてみたけれどもだめでした。