メタデータの取得

投稿者:アーク <info_nds-labo あっとまーくexcite.co.jp> 投稿日:2018/08/20(Mon) 18:21:40 No.2189

こんばんは。アークです。

ファイルのプロパティ ウィンドウの詳細タブの内容を取得する方法は有りますでしょうか?
「32-Exif情報の取得.rdr」のような事をmp3ファイルでも行いたいので、
機能名だけも教えて頂けたなら有り難いです。
ネイティブ関数を使う事になるのでしょうか?

宜しくお願いします。

Re: メタデータの取得

投稿者: 投稿日:2018/08/24(Fri) 19:11:18 No.2196

 こんばんは。

 どのようなファイルの情報を取得したいんでしょうか。
 音楽ファイルなのか、EXEファイルなのかなどなど、それによって取得方法も変わってくる気がします。

 それでは。

Re^2: メタデータの取得

投稿者:アーク <info_nds-labo あっとまーくexcite.co.jp> 投稿日:2018/08/24(Fri) 22:21:26 No.2197

陸さん、こんばんは。アークです。

いわゆるID3タグデータです。
しかし、「GetDetailsOf」等で得られる全てという事では無く、
プロパティ ウィンドウの詳細タブに表示される基本的なものだけで構いません。
プロデルにも「GetDetailsOf」と同様の機能が有ると助かるのですが…。

プロデルブログの記事を参考に

投稿者:ゆうと 投稿日:2018/08/25(Sat) 03:08:23 No.2198

こんばんは ゆうとです。

「GetDetailsOf」については、プロデルブログで記事を書いていました。
こちらを参考にしてください。
詳しく見ている時間が無いですがVBA関連で関連する情報があるので、ある程度実現可能かと思います。
https://wp.utopiat.net/2017/06/230/

それでは

Re: プロデルブログの記事を参考に

投稿者:アーク <info_nds-labo あっとまーくexcite.co.jp> 投稿日:2018/08/25(Sat) 11:55:48 No.2203

ゆうとさん、こんにちは。アークです。

関連情報の紹介ありがとうございます。
早速、下記の様に遣ってみたのですが内容ではなく項目名を取得します。
何処か間違えているのでしょうか?

  開いた時の手順
    ShellApplicationというCOM型(「Shell.Application」)を作る
    ShellApplicationからインスタンスを作ってshellAppとする
    ターゲット=「[プログラムの位置]なんちゃら.mp3」
    親フォルダ=shellApp:Namespace(「[プログラムの位置]」)
    タイトル名 = [親フォルダ]:GetDetailsOf([ターゲット], 21)
    タイトル名を表示する
  終わり

宜しくお願いします。

Re^2: プロデルブログの記事を参考に

投稿者:通りすがり 投稿日:2018/08/25(Sat) 13:17:20 No.2204

msdnで確認すると、Folder.GetDetailsOfの第1引数が違うようです。
ファイル名(文字列)ではありませんし、親フォルダの中の名前が必要なので絶対パスになることもないはずです。参考にしている記事では、フォルダ内のすべてのファイルを処理するために、itemsの全件をループしているので、特定の名前のものを取得する処理ははいっていないようです。この辺を含めて記事を一通り理解しながら読んでみてください。
フォルダ内の、特定のファイルのみ処理する場合、(プロデルではない)ほかのサイトから確認するなり調べるなりになるとおもいます(1番は、msdnです。記事を書いた人の誤解や単なる経験談の情報を避けられます。)
せっかくなので、この機会にいろいろ調べてみてはいかがでしょうか。おそらく、プロデル(を含む日本語プログラミング言語)を使う上での、最大のネックは、その言語で解説された情報の少なさなので、そこを乗り越えて、他の記事(今だとC#とか)を参考にできるようになれば、かなり「できること」が広がります。

以下は、GetDetailsOfの第1引数のmsdnの説明文です。
-----
vItem
Type: Variant
The item for which to retrieve the information. This must be a FolderItem object.
-----
ここには、FolderItem(という型の)オブジェクトでなければならない と書かれています。

特に、COM型やドットネット型を利用するための命令群は、プロデルに無い機能を自分で直接利用するための機能のため、必要に応じて調べるのが前提になってくると思います。

プロデルでの書き方が分かりません

投稿者:アーク <info_nds-labo あっとまーくexcite.co.jp> 投稿日:2018/08/25(Sat) 15:34:25 No.2205

通りすがりさん、こんにちは。アークです。

お世話になります。

そうでした。ここはオブジェクト指定でした。
一応、vbscriptでは下記内容で動いているのですが、
プロデルでの書き方が分かりません。

  Set objShellApp = CreateObject ("Shell.Application")
  Set objFolder = objShellApp.Namespace(strFolder)
  Set objFolderItems = objFolder.Items
  Set objItem = objFolderItems.Item(strFileName)

上記の4行目の書き方が分かりません。

  ShellApplicationというCOM型(「Shell.Application」)を作る
  ShellApplicationからインスタンスを作ってshellAppとする
  親フォルダ=shellApp:Namespace(「[プログラムの位置]」)
  フォルダ一覧は、[プログラムの位置]から「*.mp3」を列挙したもの

若しかしたら3「objFolderItems」もこれでは違うのかも知れません。

もうすこしよく考えてみましょう

投稿者:ゆうと 投稿日:2018/08/25(Sat) 15:56:54 No.2206

簡単に諦めず、もう少しよく考えてみましょう。
VBScriptのプログラムは参考になりますが、
そのままプロデルに変換できるわけではありません。

「やりたいこととは少し違っていても、現状でどこまでならできるか」を考えてみてください。

>   Set objShellApp = CreateObject ("Shell.Application")
>   Set objFolder = objShellApp.Namespace(strFolder)
>   Set objFolderItems = objFolder.Items
>   Set objItem = objFolderItems.Item(strFileName)

よく見ていませんが4行目のインデックサーを使った書き方がプロデルで対応していないように思いますので、今のところ実行できないかも知れません。
ただ、3行目で得られたオブジェクトを「それぞれ繰り返す」ことはできます。
答えはブログに書いてあります。

ブログの記事は、この件とは違う内容ですが、かなり近い話題を取り上げています。
もしコンデジやAndroidのスマフォをお持ちなら、USBケーブルで接続すれば試すこともできますので、遠回りとは思わずに、ぜひ最初から読んでみてください。

少し意地悪ですが、見つけられれば簡単ですので、考えてみましょう。

解決しました

投稿者:アーク <info_nds-labo あっとまーくexcite.co.jp> 投稿日:2018/08/25(Sat) 16:48:45 No.2207

ゆうとさん、ありがとうございます。

お陰様で解決しました。

「Set objFolderItems = objFolder.Items」がコレクションを返すので、
同じようにプロデルでコレクションを取る方法を考えていました。

「(親フォルダ:Items())のすべてのアイテムについてそれぞれ繰り返す」とする事で動くようになりました。
「(親フォルダ:Items())」、この様な書き方が可能とは考えつきませんでした。
どうしてもVBScriptやPowershellを引きづってしまいます。

プロデルなら何でも作れそうですね。
ありがとうございました。

通りすがりさんにもお世話になりました。

▲ページの先頭へ

- WebForum -