Windowsの付属のMSWindowsMediaPlayerにプレイリストを渡すには?

解決


新米  2008-06-09 01:07:37  No: 30929

Windows XP  Delphi6  Personalです。
今はformに貼り付けたMS  WindowsMediaPlayer1コンポーネントに
var 
  Media: IWMPMedia;
begin
  ・・・
    for i := 0 to ListBox3.Items.Count - 1 do
    begin
            str:= ListBox3.Items.Strings[i];<−−動画ファイルを登録
            Media := WindowsMediaPlayer1.mediaCollection.add(str);
            WindowsMediaPlayer1.currentPlaylist.appendItem(Media);
    end;
  WindowsMediaPlayer1.controls.play();
でプレイリスト再生しています。
これをコンポーネントではなくアプリのWindows Media Player単体、
"C:\Program Files\Windows Media Player\wmplayer.exe"の本体に
プレイリストを渡して再生する方法を教えてくださいませんか。
いまは、仕方がないので一枚ずつ
ShellExecute(formMDI.Handle, 'open', PChar(ファイル名+#0),nil,  nil, SW_SHOW);
で再生しています。
よろしくお願いします。


みんみん  2008-06-10 05:31:19  No: 30930

ただ再生するだけならShellExecuteでwmplayer.exeを起動、
関数の引数の Parameters に
再生したいメディアのファイル名を  " " (半角スペース) で区切って
複数渡せばできるような気がします。


珍しい  2008-06-10 06:38:32  No: 30931

真琴:「久しぶりの梅雨の晴れ間だネ、ハルコさん、チョットだけ夏ってカンジ」
春子:「じゃぁ日曜日の今日は皆で浜辺の清掃しよっ、あと、ドラム缶風呂の掃除も」
広海:「それって、少し早いんじゃないの〜? ハルコちゃん」
春子:「ナニ言ってンの、ホカにもまだまだイッパイやっとくコトあるんだから…」
真琴:「ドラム缶風呂はココの名物っていうか"売り"なんだから、キレイにしておかなくちゃネ」
広海:「確かに…、最初ココ来た時も、"おッ珍しい、けどイイじゃん"とは思った…」
海都:「あの、オレは…ちょっと、コレを先に済ませてしまいたいンで…」
春子:「わかった、イイよ、カイトさん、でもなるべく速くしてネ」
海都:「うん、直ぐ終わるから…」

procedure TForm1.Button1Click(Sender: TObject);
const
  WPLPATH= 'C:\Windows\Temp\_Temp.wpl';
  HEADER = '<?wpl version="1.0"?>'#13#10'<smil><body><seq>'#13#10;
  PR_SRC = '<media src="';
  EP_SRC = '"/>'#13#10;
  FOOTER = '</seq></body></smil>'#13#10;
var
  sPath: string;
  i: Integer;
begin
 with ListBox1.Items do begin
  Clear;
  Add('http://editor.dip.jp/sample/sea/sea_005.wmv');
  Add('http://editor.dip.jp/sample/sea/sea_006.wmv');
  Add('http://editor.dip.jp/sample/sea/cloud.wmv');
  Add('http://editor.dip.jp/sample/sea/kamome_001.wmv');
  Add('http://editor.dip.jp/sample/sea/sea_004.wmv');
  Add('http://editor.dip.jp/sample/sun/sunset_001.wmv');
  Add('http://editor.dip.jp/sample/sun/sunset_002.wmv');
  with TFileStream.Create(WPLPATH, fmCreate) do try
   Write(HEADER, Length(HEADER));
   for i:=0 to Count-1 do begin
    sPath := Strings[i];
    Write(PR_SRC, Length(PR_SRC));
    Write(sPath[1], Length(sPath));
    Write(EP_SRC, Length(EP_SRC));
   end;
   Write(FOOTER, Length(FOOTER));
  finally
   Free;
  end;
 end;
 ShellExecute(Handle, 'Open', PChar(WPLPATH), nil, nil, SW_SHOW);
end;

真琴:「ふ〜ん、こうするとWindowsMediaPlayerに再生リスト渡せるのネ」
海都:「そう、再生リストは、wplファイルなんだよ、この場合はURLのリスト」
真琴:「カイトさん、じゃ、パソコンにあるファイルなら、パス書けばいいのよネ?」
海都:「うん、でもそれには注意するコトが一つあるんだ、マコっちゃん」
真琴:「一つだけ? なら楽勝じゃん、ネェ、カイトさん?」
海都:「そぅ?」
真琴:「注意するコトってナンなの? カイトさん」
海都:「それはね、もしパスの中に漢字なんかがあったら、UTF8形式にするコト」
真琴:「え? UTF8? あの、それ…」
春子:「カイトさ〜ん、サクラさんから電話、…だけどチョット元気ないみたいよ」
海都:「エッ、元気ない? ナンだろ…、わかった、直ぐ出る」
広海:「あれ? "携帯"持ってないのぉ?」
海都:「サイフと一緒に"携帯"も行方不明のままだよ」
真琴:「そういえば、クラスの中で"携帯"持ってないの、アタシとユウコくらいかなぁ」
広海:「イマドキ珍しいよねぇ〜、ま、オレもだけど…」


新米  2008-06-10 09:34:20  No: 30932

みんみんさん、珍しいさんありがとうございました。
返事が遅くなりすみません。
解決できました。
最初は、ファイルを複数わたせは良いじゃないかと簡単に考えていました。
しかし、実際ファイルを選択して、変数に入れて実行させるのが簡単ではないと解りました。ひとかたまりにする変数がミソ???
mpのヘルプを調べたりしていましたが解りませんでした。
いろいろなサイトもコンポーネントに渡す例は出ているのですが、
アプリに渡す例は見つけられませんでした。
助かりました。


みんみん  2008-06-11 08:47:48  No: 30933

引数にパラメータを渡すときにはファイル名の中の空白を考慮して
ファイル名ごとに " で囲んで連結するのがミソです。

var
  Fname: string;
  i: integer;
begin
  //OpenDialogを複数選択可に
  OpenDialog1.Options :=OpenDialog1.Options + [ofAllowMultiSelect];
  if OpenDialog1.Execute then
  begin
    for i :=0 to Opendialog1.Files.Count-1 do
      //ダブルクォーテンションで囲みながら連結
      Fname :=Fname +'"' + OpenDialog1.Files[i] + '" ';

     ShellExecute(Handle, 'OPEN', 'wmplayer.exe', PChar(Fname), nil, SW_SHOWNORMAL);
  end;
end;


新米  2008-06-13 04:46:15  No: 30934

みんみんさん、ご返事ありがとうございました。
しばらく夢中でプログラミングしていて、ここを覗きませんでした。
OpenDialogでこういうことが出来るんですね。大収穫です。
他にもいろいろなことに使えそうで、勉強になりました。
さらに、コーディングがシンプルになりそうです。
お礼まで。では。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加