[BlueLeaf1336]> PROBLEMS> DelphiでShellオブジェクトを使う>
| history | TOP |
2006/05/29:作成
| 2006/05/29 | TOP |
最近、いろんな状況から、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オブジェクト について調べてみようか、など考えています。なんの用途も見出せないので、時間の無駄ですが、だからこそやる気になるというか。
| EOF | TOP |