投稿日 | 18/08/20-18:21 |
---|---|
投稿者 | アーク info_nds-laboexcite.co.jp |
参照先 |
こんばんは。アークです。
ファイルのプロパティ ウィンドウの詳細タブの内容を取得する方法は有りますでしょうか?
「32-Exif情報の取得.rdr」のような事をmp3ファイルでも行いたいので、
機能名だけも教えて頂けたなら有り難いです。
ネイティブ関数を使う事になるのでしょうか?
宜しくお願いします。
投稿日 | 18/08/24-19:11 |
---|---|
投稿者 | 陸 |
参照先 | https://riku22.net/ |
こんばんは。
どのようなファイルの情報を取得したいんでしょうか。
音楽ファイルなのか、EXEファイルなのかなどなど、それによって取得方法も変わってくる気がします。
それでは。
投稿日 | 18/08/24-22:21 |
---|---|
投稿者 | アーク info_nds-laboexcite.co.jp |
参照先 |
陸さん、こんばんは。アークです。
いわゆるID3タグデータです。
しかし、「GetDetailsOf」等で得られる全てという事では無く、
プロパティ ウィンドウの詳細タブに表示される基本的なものだけで構いません。
プロデルにも「GetDetailsOf」と同様の機能が有ると助かるのですが…。
投稿日 | 18/08/25-03:08 |
---|---|
投稿者 | ゆうと |
参照先 |
こんばんは ゆうとです。
「GetDetailsOf」については、プロデルブログで記事を書いていました。
こちらを参考にしてください。
詳しく見ている時間が無いですがVBA関連で関連する情報があるので、ある程度実現可能かと思います。
https://wp.utopiat.net/2017/06/230/
それでは
投稿日 | 18/08/25-11:55 |
---|---|
投稿者 | アーク info_nds-laboexcite.co.jp |
参照先 |
ゆうとさん、こんにちは。アークです。
関連情報の紹介ありがとうございます。
早速、下記の様に遣ってみたのですが内容ではなく項目名を取得します。
何処か間違えているのでしょうか?
開いた時の手順
ShellApplicationというCOM型(「Shell.Application」)を作る
ShellApplicationからインスタンスを作ってshellAppとする
ターゲット=「[プログラムの位置]なんちゃら.mp3」
親フォルダ=shellApp:Namespace(「[プログラムの位置]」)
タイトル名 = [親フォルダ]:GetDetailsOf([ターゲット], 21)
タイトル名を表示する
終わり
宜しくお願いします。
投稿日 | 18/08/25-13:17 |
---|---|
投稿者 | 通りすがり |
参照先 |
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型やドットネット型を利用するための命令群は、プロデルに無い機能を自分で直接利用するための機能のため、必要に応じて調べるのが前提になってくると思います。
投稿日 | 18/08/25-15:34 |
---|---|
投稿者 | アーク info_nds-laboexcite.co.jp |
参照先 |
通りすがりさん、こんにちは。アークです。
お世話になります。
そうでした。ここはオブジェクト指定でした。
一応、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」もこれでは違うのかも知れません。
投稿日 | 18/08/25-15:56 |
---|---|
投稿者 | ゆうと |
参照先 |
簡単に諦めず、もう少しよく考えてみましょう。
VBScriptのプログラムは参考になりますが、
そのままプロデルに変換できるわけではありません。
「やりたいこととは少し違っていても、現状でどこまでならできるか」を考えてみてください。
> Set objShellApp = CreateObject ("Shell.Application")
> Set objFolder = objShellApp.Namespace(strFolder)
> Set objFolderItems = objFolder.Items
> Set objItem = objFolderItems.Item(strFileName)
よく見ていませんが4行目のインデックサーを使った書き方がプロデルで対応していないように思いますので、今のところ実行できないかも知れません。
ただ、3行目で得られたオブジェクトを「それぞれ繰り返す」ことはできます。
答えはブログに書いてあります。
ブログの記事は、この件とは違う内容ですが、かなり近い話題を取り上げています。
もしコンデジやAndroidのスマフォをお持ちなら、USBケーブルで接続すれば試すこともできますので、遠回りとは思わずに、ぜひ最初から読んでみてください。
少し意地悪ですが、見つけられれば簡単ですので、考えてみましょう。
投稿日 | 18/08/25-16:48 |
---|---|
投稿者 | アーク info_nds-laboexcite.co.jp |
参照先 |
ゆうとさん、ありがとうございます。
お陰様で解決しました。
「Set objFolderItems = objFolder.Items」がコレクションを返すので、
同じようにプロデルでコレクションを取る方法を考えていました。
「(親フォルダ:Items())のすべてのアイテムについてそれぞれ繰り返す」とする事で動くようになりました。
「(親フォルダ:Items())」、この様な書き方が可能とは考えつきませんでした。
どうしてもVBScriptやPowershellを引きづってしまいます。
プロデルなら何でも作れそうですね。
ありがとうございました。
通りすがりさんにもお世話になりました。
- WebForum -