[BlueLeaf1336]> PROBLEMS> DelphiでShellオブジェクトを使う>

はじめに

historyTOP

2006/05/29:作成

2006/05/29TOP

最近、いろんな状況から、JPGファイルのExif情報を読み取りたくなりました。Delphiでも誰かやってるだろうと思って調べてみると、なにやら不穏な感じです。

いくらでも参考になりそうなサイトは見つかって、ソースコード(C言語。金儲けに使わない限りフリー)さえ入手することができます。が!! なんとややこしいことか。Exif file format を参考にすこーしだけやりはじめましたが、すぐにイヤになりました。

ところで、デジカメで撮影したJPGファイルをWindowsXPのファイルのプロパティで概要を詳細表示してみると、こんな感じです。

十分です。イヤ完璧です。これでええやん。これをとりだせたらええやん。というわけで、検索してみました。

これは、ワードファイルの、ということですが、なにやらそれっぽい感じです。ただ、VisualBasicなので、これをDelphiでやるには? ということで、

この二つを参考に、少しやってみるとこんな感じに。

いやいや、まったく足りてないんですが、でも「DSC-V1」というカメラのモデルや、写真のサイズが取得できました。ひょっとして脈ありか?

そんなこんなで、このページが作成されました。ちなみに、さっきのカメラのモデルに毛の生えた情報は、次のコードで取得しています。重ねて確認しておきますが、なーんにも考えず、つぎはぎしただけです。Platform SDK も少し参考にしましたが、Shellオブジェクトが有効かどうかのチェックすらDelphiに翻訳できず、エラー処理も全部省いています。

uses
    ComObj;

{$R *.dfm}

//  http://www2.moug.net/bbs/wordvba/20060517000002.htm
//  http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/043/043760.html
//  http://pc.2ch.net/tech/kako/1019/10196/1019654975.html
procedure TForm1.Button1Click(Sender: TObject);
var
    FilePath: String;
    FileName: String;
    ObjShell: Variant;
    ObjFolder: Variant;
    ObjFolderItem: Variant;
    i: Integer;
begin
    if (not OpenDialog1.Execute) then Exit;

    Memo1.Clear();

    FilePath := ExtractFileDir(OpenDialog1.FileName);
    FileName := ExtractFileName(OpenDialog1.FileName);

    ObjShell := CreateOleObject('Shell.Application.1');
    ObjFolder := ObjShell.NameSpace(OleVariant(FilePath));
    ObjFolderItem := ObjFolder.ParseName(FileName);

    for i := 0 to 40 do
    begin
        Memo1.Lines.Add(ObjFolder.GetDetailsOf(ObjFolderItem, i));
    end;
end;

始まったばかり、ということです。実は、Exif情報はどうでもよくなってきてます。それよりも、Shellオブジェクト、Folderオブジェクト、FolderItemsオブジェクト、FolderItemオブジェクト について調べてみようか、など考えています。なんの用途も見出せないので、時間の無駄ですが、だからこそやる気になるというか。

EOFTOP