Excel VBAでオブジェクト指向プログラミング(Windows Media Player編)
■Windows Media Player(WMP)の概要
Windows Media Player(WMP)は、Microsoft社が開発したメディアプレイヤーソフトで、Windowsに標準搭載されています。
通常は独立したソフトウェアとして利用していますが、ActiveXコントロールやCOMオブジェクトが提供されていますので、Excel VBAで操作することが可能です。
⇒詳細はMicrosoftのサイト(Windows メディア プレーヤー オブジェクト モデル)を参照して下さい。
WMPの主なオブジェクトは下表の通りですが、本稿では以下に挙げた11種類のオブジェクト(下表の太字で表示したオブジェクト)について、サンプル・プログラムを交えて詳細を説明します。
(1)ルートオブジェクト(Playerオブジェクト)
(2)WMP本体に関するオブジェクト(Controlsオブジェクト、Settingsオブジェクト)
(3)メディアに関するオブジェクト(MediaCollectionオブジェクト、Mediaオブジェクト)
(4)プレイリストに関するオブジェクト(PlaylistCollectionオブジェクト、Playlistオブジェクト)
(5)CDに関するオブジェクト(CdromCollectionオブジェクト、Cdromオブジェクト、CdromRipオブジェクト、CdromBurnオブジェクト)
(WindowsMediaPlayerオブジェクトの階層構造)
| オブジェクト | 説明 | |
|---|---|---|
| Playerオブジェクト | WMPのルートオブジェクト | |
| CdromCollectionオブジェクト | CDまたはDVDドライブのコレクション | |
| Cdromオブジェクト | ドライブ内のCDまたはDVD | |
| CdromBurnオブジェクト | オーディオCDの書き込み | |
| CdromRipオブジェクト | オーディオCDの読み込み | |
| ClosedCaptionオブジェクト | クローズドキャプション | |
| Controlsオブジェクト | トランスポートコントロール | |
| DVDオブジェクト | DVDの操作 | |
| Errorオブジェクト | ErrorItemのコレクション | |
| ErrorItemオブジェクト | エラー情報 | |
| Libraryオブジェクト | ライブラリ | |
| MediaCollectionオブジェクト | Mediaのコレクション | |
| Mediaオブジェクト | メディアアイテム | |
| Networkオブジェクト | ネットワーク接続 | |
| PlayerApplicationオブジェクト | リモートモード(C++のみ) | |
| PlaylistCollectionオブジェクト | Playlistのコレクション | |
| PlaylistArrayオブジェクト | プレイリスト(インデックス番号指定) | |
| Playlistオブジェクト | プレイリストに関するオブジェクト | |
| Queryオブジェクト | 複合クエリ | |
| Settingsオブジェクト | 設定 | |
| StringCollectionオブジェクト | 文字列のコレクション | |
| SyncDeviceオブジェクト | SyncDevice(C++のみ) | |
WMPの利用方法とPlayerオブジェクトの詳細
WMPを利用する際は、ルートオブジェクトであるPlayerオブジェクトを使用可能な状態にする必要があります。
Playerオブジェクトは多くの下位オブジェクトを持ちますが、基本的にはPlayerオブジェクトのメソッドまたはプロパティで設定/取得が可能です。
WMPの利用方法
WMPをプログラムから利用するためには、ActiveXコントロールを使用する方法とActiveXコントロールを使用しない方法があります。
ActiveXコントロールを使用する方法
以下の手順でWindowsMediaPlayerコントロールを配置すれば、ライブラリへの参照が自動的に設定され、Playerオブジェクトがインスタンス化されますので、WMPが利用可能になります。
(1)[開発]タブで[挿入]をクリックし、表示されたメニューの下段「ActiveX コントロール」の最後にある「コントロールの選択(ドライバーとスパナのアイコン)」をクリックします。

(2)表示された一覧表から「Wndows Media Player」を選択し、ユーザフォームやワークシートに配置します。

(3)Wndows Media Playerコントロールのオブジェクト名は、「WindowsMediaPlayer1」になっていますので、名前を変更せずに使用するのであれば、以下のようにコーディングすることになります(オブジェクト変数の定義は不要です)。
- WindowsMediaPlayer1.〜メソッド
- WindowsMediaPlayer1.〜プロパティ = xxx
- xxx = WindowsMediaPlayer1.〜プロパティ
例えば、行番号2の部分を「WindowsMediaPlayer1.URL = “C:\work\xxx.mp3″」のように記述すれば、WindowsMediaPlayerコントロール上でMP3ファイルの再生が開始されます。
ActiveXコントロールを使用しない方法
以下の手順でPlayerオブジェクトをインスタンス化すれば、WMPが利用可能になります。
⇒オブジェクトを使用するための事前準備とオブジェクトブラウザによる調査方法については、Excel VBAでオブジェクト指向プログラミング(事前準備編)を参照して下さい。
(1)Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでWindows Media Playerのチェックボックスにチェックを入れ、[OK]ボタンを押下します。
(Windows Media Playerが複数表示される場合は、ライブラリ名が「wmp.dll」となっている行を選択して下さい)

(2)プログラムの宣言部でオブジェクト変数を定義し、プログラムの処理部でインスタンスを生成します。
- '宣言部
- Dim wmp As WindowsMediaPlayer
- '処理部
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- wmp.〜メソッド
- wmp.〜プロパティ = xxx
- xxx = wmp.〜プロパティ
例えば、行番号2の部分を「wmp.URL = “C:\work\xxx.mp3″」のように記述すれば、バックグラウンドでMP3ファイルの再生が開始され、音声だけが聞こえる状態になります。
なお、行番号2の部分を「wmp.openPlayer (“C:\work\xxx.mp3")」のように記述すると、別のウィンドウでWMPlが実行されます。
(※1)行番号5を「Set wmp = New WindowsMediaPlayer」のように記述すると実行時エラーになるため、CreateObject関数にGUIDを指定して「Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")」のように記述しています。
(※2)オブジェクトブラウザでwmp.dll(WMPLib)を調べると、「WMPCoreオブジェクト」というものがあり、Playerオブジェクトとほぼ同等のメソッドおよびプロパティを持っていますが、「WindowsMediaPlayerの内部オブジェクトなので非公開」という説明文が記載されています。
Playerオブジェクト(WindowsMediaPlayer)のメソッド
Playerオブジェクトで提供されているメソッドは下表の通りです。
| closeメソッド | |
| 説明 | Windows Media Playerのリソースを解放する |
| 定義 | Sub close() |
| launchURLメソッド | |
| 説明 | レンダリングする既定のブラウザにURLを送信する |
| 定義 | Sub launchURL(bstrURL As String) |
| newMediaメソッド | |
| 説明 | 新しいMediaオブジェクトを作成する |
| 定義 | Function newMedia(bstrURL As String) As IWMPMedia |
| newPlaylistメソッド | |
| 説明 | 新しいPlaylistオブジェクトを作成する |
| 定義 | Function newPlaylist(bstrName As String, bstrURL As String) As IWMPPlaylist |
| openPlayerメソッド | |
| 説明 | 指定したURLを使用してWindows Media Playerを開く |
| 定義 | Sub openPlayer(bstrURL As String) |
Playerオブジェクト(WindowsMediaPlayer)のプロパティ
Playerオブジェクトで提供されているプロパティは下表の通りです。
| cdromCollectionプロパティ(読み取り専用) | |
| 説明 | CdromCollectionオブジェクトを取得 |
| 定義 | Property cdromCollection() As IWMPCdromCollection |
| closedCaptionプロパティ(読み取り専用) | |
| 説明 | ClosedCaptionオブジェクトを取得 |
| 定義 | Property closedCaption() As IWMPClosedCaption |
| controlsプロパティ(読み取り専用) | |
| 説明 | Controlsオブジェクトを取得 |
| 定義 | Property controls() As IWMPControls |
| currentMediaプロパティ | |
| 説明 | 現在のMediaオブジェクトを設定/取得 |
| 定義 | Property currentMedia() As IWMPMedia |
| currentPlaylistプロパティ | |
| 説明 | 現在のPlaylistオブジェクトを設定/取得 |
| 定義 | Property currentPlaylist() As IWMPPlaylist |
| dvdプロパティ(読み取り専用) | |
| 説明 | DVDオブジェクトを取得 |
| 定義 | Property dvd() As IWMPDVD |
| enableContextMenuプロパティ | |
| 説明 | コンテキストメニューを有効にするかどうかを設定/取得(Trueの場合、有効。既定値はTrue) |
| 定義 | Property enableContextMenu() As Boolean |
| enabledプロパティ | |
| 説明 | Windows Media Playerコントロールを有効にするかどうかを設定/取得(Trueの場合、有効。既定値はTrue) |
| 定義 | Property enabled() As Boolean |
| Errorプロパティ(読み取り専用) | |
| 説明 | Errorオブジェクトを取得 |
| 定義 | Property Error() As IWMPError |
| fullScreenプロパティ | |
| 説明 | ビデオコンテンツを全画面表示モードで再生するかどうかを設定/取得(Trueの場合、全画面表示。既定値はFalse) |
| 定義 | Property fullScreen() As Boolean |
| isOnlineプロパティ(読み取り専用) | |
| 説明 | ユーザがネットワークに接続しているかどうかを取得(Trueの場合、ネットワーク接続) |
| 定義 | Property isOnline() As Boolean |
| isRemoteプロパティ(読み取り専用) | |
| 説明 | Windows Media Playerコントロールをリモートモードで実行しているかどうかを取得(Trueの場合、リモートモード) |
| 定義 | Property isRemote() As Boolean |
| mediaCollectionプロパティ(読み取り専用) | |
| 説明 | MediaCollectionオブジェクトを取得 |
| 定義 | Property mediaCollection() As IWMPMediaCollection |
| networkプロパティ(読み取り専用) | |
| 説明 | Networkオブジェクトを取得 |
| 定義 | Property network() As IWMPNetwork |
| openStateプロパティ(読み取り専用) | |
| 説明 | コンテンツソースの状態を取得
(※)WMPOpenState列挙体の値は、以下の通り。 |
| 定義 | Property openState() As WMPOpenState |
| playerApplicationプロパティ(読み取り専用) | |
| 説明 | PlayerApplicationオブジェクトを取得 |
| 定義 | Property playerApplication() As IWMPPlayerApplication |
| playlistCollectionプロパティ(読み取り専用) | |
| 説明 | PlaylistCollectionオブジェクトを取得 |
| 定義 | Property playlistCollection() As IWMPPlaylistCollection |
| playStateプロパティ(読み取り専用) | |
| 説明 | Windows Media Playerの状態を取得
(※)WMPPlayState列挙体の値は、以下の通り。 |
| 定義 | Property playState() As WMPPlayState |
| settingsプロパティ(読み取り専用) | |
| 説明 | Settingsオブジェクトを取得 |
| 定義 | Property settings() As IWMPSettings |
| statusプロパティ(読み取り専用) | |
| 説明 | Windows Media Playerの状態を文字列で取得 |
| 定義 | Property status() As String |
| stretchToFitプロパティ | |
| 説明 | Windows Media Playerコントロールのビデオ表示のサイズに合せてビデオを拡大するかどうかを設定/取得(Trueの場合、ビデオを拡大。既定値はFalse) |
| 定義 | Property stretchToFit() As Boolean |
| uiModeプロパティ | |
| 説明 | ユーザインターフェイスの表示方法を設定/取得
(※)指定可能な値は、以下の通り。 |
| 定義 | Property uiMode() As String |
| URLプロパティ | |
| 説明 | 再生するメディア項目を設定/取得 |
| 定義 | Property URL() As String |
| versionInfoプロパティ(読み取り専用) | |
| 説明 | Windows Media Playerのバージョン情報を取得 |
| 定義 | Property versionInfo() As String |
| windowlessVideoプロパティ | |
| 説明 | Windows Media Playerコントロールがウィンドウレスモードでビデオをレンダリングするかどうかを設定/取得(Trueの場合、レンダリングする。既定値はFalse) |
| 定義 | Property windowlessVideo() As Boolean |
WMP本体に関するオブジェクト(Controlsオブジェクト、Settingsオブジェクト)の詳細
WMPの本体に関するオブジェクトとして、WMPのトランスポートコントロール(再生、停止、一時停止など)を表すControlsオブジェクト、WMPの設定を表すSettingsオブジェクトについて、詳細を説明します。
Controlsオブジェクト(IWMPControls)の詳細
Controlsオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。
| audioLanguageCountプロパティ(読み取り専用) | |
| 説明 | サポートされているオーディオ言語の数を取得 |
| 定義 | Property audioLanguageCount() As Long |
| currentAudioLanguageプロパティ | |
| 説明 | 再生するオーディオ言語のロケール識別子(LCID)を設定/取得 |
| 定義 | Property currentAudioLanguage() As Long |
| currentAudioLanguageIndexプロパティ | |
| 説明 | 再生するオーディオ言語に対応するインデックスを設定/取得 |
| 定義 | Property currentAudioLanguageIndex() As Long |
| currentItemプロパティ | |
| 説明 | 現在のメディア項目を設定/取得 |
| 定義 | Property currentItem() As IWMPMedia |
| currentMarkerプロパティ | |
| 説明 | 現在のマーカー番号を設定/取得 |
| 定義 | Property currentMarker() As Long |
| currentPositionプロパティ | |
| 説明 | メディア項目内の現在の位置を秒単位で設定/取得 |
| 定義 | Property currentPosition() As Double |
| currentPositionStringプロパティ(読み取り専用) | |
| 説明 | メディア項目内の現在の位置を文字列で設定/取得 |
| 定義 | Property currentPositionString() As String |
| currentPositionTimecodeプロパティ | |
| 説明 | メディア項目内の現在の位置をタイムコード形式で設定/取得 |
| 定義 | Property currentPositionTimecode() As String |
| fastForwardメソッド | |
| 説明 | メディア項目の早送りを開始する |
| 定義 | Sub fastForward() |
| fastReverseメソッド | |
| 説明 | メディア項目の巻き戻しを開始する |
| 定義 | Sub fastReverse() |
| getAudioLanguageDescriptionメソッド | |
| 説明 | 指定したインデックスに対応するオーディオ言語の説明を取得する |
| 定義 | Function getAudioLanguageDescription(lIndex As Long) As String |
| getAudioLanguageIDメソッド | |
| 説明 | 指定したインデックスに対応するオーディオ言語のロケール識別子(LCID)を取得する |
| 定義 | Function getAudioLanguageID(lIndex As Long) As Long |
| getLanguageNameメソッド | |
| 説明 | 指定したロケール識別子(LCID)を持つオーディオ言語の名前を取得する |
| 定義 | Function getLanguageName(lLangID As Long) As String |
| isAvailableプロパティ(読み取り専用) | |
| 説明 | 指定した機能が使用可能かどうかを取得(Trueの場合、使用可能)
(※)bstrItem引数に指定可能な値は、以下の通り。 |
| 定義 | Property isAvailable(bstrItem As String) As Boolean |
| nextメソッド | |
| 説明 | 現在のメディア項目をプレイリスト内の次のメディア項目に設定する |
| 定義 | Sub next() |
| pauseメソッド | |
| 説明 | メディア項目の再生を一時停止する |
| 定義 | Sub pause() |
| playメソッド | |
| 説明 | メディア項目の再生を開始する |
| 定義 | Sub play() |
| playItemメソッド | |
| 説明 | 指定したメディア項目の再生を開始(一時停止中の場合は再開)する |
| 定義 | Sub playItem(pIWMPMedia As IWMPMedia) |
| previousメソッド | |
| 説明 | 現在のメディア項目をプレイリスト内の前のメディア項目に設定する |
| 定義 | Sub previous() |
| stepメソッド | |
| 説明 | 現在のビデオメディア項目を1フレーム進める
(※)lStep引数に指定可能な値は、以下の通り。 |
| 定義 | Sub step(lStep As Long) |
| stopメソッド | |
| 説明 | メディア項目の再生を停止する |
| 定義 | Sub stop() |
Settingsオブジェクト(IWMPSettings)の詳細
Settingsオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。
| autoStartプロパティ | |
| 説明 | 現在のメディア項目が自動的に再生を開始するかどうかを設定/取得(Trueの場合、開始する。既定値はTrue) |
| 定義 | Property autoStart() As Boolean |
| balanceプロパティ | |
| 説明 | 現在のステレオバランスを設定/取得 |
| 定義 | Property balance() As Long |
| baseURLプロパティ | |
| 説明 | 相対パス解決に使用するベースURLを設定/取得 |
| 定義 | Property baseURL() As String |
| defaultAudioLanguageプロパティ(読み取り専用) | |
| 説明 | 既定のオーディオ言語のロケール識別子(LCID)を取得 |
| 定義 | Property defaultAudioLanguage() As Long |
| defaultFrameプロパティ | |
| 説明 | ScriptCommandイベントで受信したURLの表示に使用するフレームの名前を設定/取得 |
| 定義 | Property defaultFrame() As String |
| enableErrorDialogsプロパティ | |
| 説明 | エラーダイアログボックスを自動的に表示するかどうかを設定/取得(Trueの場合、表示する。既定値はTrue) |
| 定義 | Property enableErrorDialogs() As Boolean |
| getModeメソッド | |
| 説明 | プレイリストの再生モードを取得する(戻り値がTrueの場合、アクティブ)
(※)bstrMode引数に指定可能な値は、以下の通り。 |
| 定義 | Function getMode(bstrMode As String) As Boolean |
| invokeURLsプロパティ | |
| 説明 | URLイベントがWebブラウザを起動する必要があるかどうかを設定/取得(Trueの場合、Webブラウザの起動が必要。既定値はTrue) |
| 定義 | Property invokeURLs() As Boolean |
| isAvailableプロパティ(読み取り専用) | |
| 説明 | 指定した機能が使用可能かどうかを取得(Trueの場合、使用可能)
(※)bstrItem引数に指定可能な値は、以下の通り。 |
| 定義 | Property isAvailable(bstrItem As String) As Boolean |
| mediaAccessRightsプロパティ(読み取り専用) | |
| 説明 | ライブラリアクセスに対して現在付与されている権限を取得
(※)取得可能な値は、以下の通り。 |
| 定義 | Property mediaAccessRights() As String |
| muteプロパティ | |
| 説明 | オーディオがミュートされているかどうかを設定/取得(Trueの場合、ミュート。既定値はFalse) |
| 定義 | Property mute() As Boolean |
| playCountプロパティ | |
| 説明 | メディア項目の再生回数を設定/取得(既定値は1) |
| 定義 | Property playCount() As Long |
| rateプロパティ | |
| 説明 | ビデオメディアの現在の再生レートを設定/取得 |
| 定義 | Property rate() As Double |
| requestMediaAccessRightsメソッド | |
| 説明 | ライブラリへの指定したレベルのアクセスを要求する
(※)bstrDesiredAccess引数に指定可能な値は、以下の通り。 |
| 定義 | Function requestMediaAccessRights(bstrDesiredAccess As String) As Boolean |
| setModeメソッド | |
| 説明 | プレイリストの再生モードを設定する
(※)bstrMode引数に指定可能な値は、以下の通り。 (※)varfMode引数に指定可能な値は、以下の通り。 |
| 定義 | Sub setMode(bstrMode As String, varfMode As Boolean) |
| volumeプロパティ | |
| 説明 | 現在のボリュームを設定/取得 |
| 定義 | Property volume() As Long |
サンプル・プログラム(1)~InputBoxでWindowsMediaPlayerを操作(1)
予めExcelシートのA列に音楽ファイルのフルパスを入力しておき、以下のプログラムを起動するとInputBoxが表示され、コマンド入力待ちになりますので、「PLAY(再生)」「NEXT(次へ)」「PREV(前へ)」「STOP(停止)」のいずれかのコマンドを入力すると、指定した動作を実行します。
行番号8でSettingsオブジェクトのautoStartプロパティにFalseを設定して自動的に再生が開始されないようにしたうえ、行番号10でPlayerオブジェクトのURLプロパティに最初の音楽ファイルを設定して、行番号11~37の繰返し処理に入ります。
行番号12でInputBoxを表示し、行番号13~15は「キャンセル」ボタン(または「Esc」キー)が押下された時にループから抜ける処理、行番号16~36が入力したコマンドに対応する処理です。
行番号18はControlsオブジェクトのplayメソッドを実行、行番号20はControlsオブジェクトのstopメソッドを実行、行番号27~28はPlayerオブジェクトのURLプロパティに次の音楽ファイルを設定してからControlsオブジェクトのplayメソッドを実行、行番号34~35はPlayerオブジェクトのURLプロパティに前の音楽ファイルを設定してからControlsオブジェクトのplayメソッドを実行しています。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim rcnt As Long
- Private Sub Sample1()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- wmp.settings.autoStart = False
- rcnt = 1
- wmp.URL = sht.Cells(rcnt, 1)
- Do
- wStr = InputBox(“コマンドを入力して下さい")
- If StrPtr(wStr) = 0 Then
- Exit Do
- End If
- Select Case UCase(wStr)
- Case “PLAY"
- wmp.Controls.Play
- Case “STOP"
- wmp.Controls.stop
- Exit Do
- Case “NEXT"
- rcnt = rcnt + 1
- If rcnt > sht.Cells(sht.Rows.Count, 1).End(xlUp).Row Then
- rcnt = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
- End If
- wmp.URL = sht.Cells(rcnt, 1)
- wmp.Controls.Play
- Case “PREV"
- rcnt = rcnt – 1
- If rcnt < 1 Then
- rcnt = 1
- End If
- wmp.URL = sht.Cells(rcnt, 1)
- wmp.Controls.Play
- End Select
- Loop
- wmp.Close
- Set wmp = Nothing
- End Sub
サンプル・プログラム(2)~InputBoxでWindowsMediaPlayerを操作(2)
WindowsMediaPlayerコントロールを使用して、サンプル・プログラム(1)と同様の処理を行うプログラムです。
行番号6でWMPのトランスポートコントロール(再生、停止、一時停止など)を非表示に設定し、行番号7でSettingsオブジェクトのautoStartプロパティにFalseを設定して自動的に再生が開始されないようにしたうえ、行番号9でPlayerオブジェクトのURLプロパティに最初の音楽ファイルを設定して、行番号10~36の繰返し処理に入ります。
行番号11でInputBoxを表示し、行番号12~14は「キャンセル」ボタン(または「Esc」キー)が押下された時にループから抜ける処理、行番号15~35が入力したコマンドに対応する処理です。
行番号17はControlsオブジェクトのplayメソッドを実行、行番号19はControlsオブジェクトのstopメソッドを実行、行番号26~27はPlayerオブジェクトのURLプロパティに次の音楽ファイルを設定してからControlsオブジェクトのplayメソッドを実行、行番号33~34はPlayerオブジェクトのURLプロパティに前の音楽ファイルを設定してからControlsオブジェクトのplayメソッドを実行しています。
- Dim sht As Worksheet
- Dim rcnt As Long
- Private Sub Sample2()
- Set sht = ActiveSheet
- WindowsMediaPlayer1.uiMode = “none"
- WindowsMediaPlayer1.settings.autoStart = False
- rcnt = 1
- WindowsMediaPlayer1.URL = sht.Cells(rcnt, 1)
- Do
- wStr = InputBox(“コマンドを入力して下さい")
- If StrPtr(wStr) = 0 Then
- Exit Do
- End If
- Select Case UCase(wStr)
- Case “PLAY"
- WindowsMediaPlayer1.Controls.Play
- Case “STOP"
- WindowsMediaPlayer1.Controls.stop
- Exit Do
- Case “NEXT"
- rcnt = rcnt + 1
- If rcnt > sht.Cells(sht.Rows.Count, 1).End(xlUp).Row Then
- rcnt = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
- End If
- WindowsMediaPlayer1.URL = sht.Cells(rcnt, 1)
- WindowsMediaPlayer1.Controls.Play
- Case “PREV"
- rcnt = rcnt – 1
- If rcnt < 1 Then
- rcnt = 1
- End If
- WindowsMediaPlayer1.URL = sht.Cells(rcnt, 1)
- WindowsMediaPlayer1.Controls.Play
- End Select
- Loop
- End Sub
WindowsMediaPlayerコントロールのuiModeを"none"に設定するとトランスポートコントロールが非表示になりますが、WindowsMediaPlayerコントロール上でマウスを右クリックすると、下図のようなコンテキストメニューが表示されますので、このメニューから操作することは可能です。

メディアに関するオブジェクト(MediaCollectionオブジェクト、Mediaオブジェクト)の詳細
メディアに関するオブジェクトとして、メディア項目のコレクションを表すMediaCollectionオブジェクト、個々のメディアを表すMediaオブジェクトについて、詳細を説明します。
MediaCollectionオブジェクト(IWMPMediaCollection)の詳細
MediaCollectionオブジェクトで提供されているメソッドは下表の通りです(プロパティはありません)。
| addメソッド | |
| 説明 | ライブラリに新しいメディア項目またはプレイリストを追加する |
| 定義 | Function add(bstrURL As String) As IWMPMedia |
| createQueryメソッド | |
| 説明 | 新しいQueryオブジェクトを作成する |
| 定義 | Function createQuery() As IWMPQuery |
| getAllメソッド | |
| 説明 | ライブラリ内の全てのメディア項目を含むPlaylistオブジェクトを取得する |
| 定義 | Function getAll() As IWMPPlaylist |
| getAttributeStringCollectionメソッド | |
| 説明 | 指定したメディア種類内の指定した属性の全ての値のセットを表すStringCollectionオブジェクトを取得する |
| 定義 | Function getAttributeStringCollection(bstrAttribute As String, bstrMediaType As String) As IWMPStringCollection |
| getByAlbumメソッド | |
| 説明 | 指定したアルバムからメディア項目を含むPlaylist オブジェクト取得する |
| 定義 | Function getByAlbum(bstrAlbum As String) As IWMPPlaylist |
| getByAttributeメソッド | |
| 説明 | 指定した属性の指定した値を含むメディア項目のプレイリストを取得する |
| 定義 | Function getByAttribute(bstrAttribute As String, bstrValue As String) As IWMPPlaylist |
| getByAttributeAndMediaTypeメソッド | |
| 説明 | 指定した属性とメディア種類を持つMediaオブジェクトを含むPlaylistオブジェクトを取得する |
| 定義 | Function getByAttributeAndMediaType(bstrAttribute As String, bstrValue As String, bstrMediaType As String) As IWMPPlaylist |
| getByAuthorメソッド | |
| 説明 | 指定した作成者のメディア項目を含むPlaylistオブジェクトを取得する |
| 定義 | Function getByAuthor(bstrAuthor As String) As IWMPPlaylist |
| getByGenreメソッド | |
| 説明 | 指定したジャンルのメディア項目を含むPlaylistオブジェクトを取得する |
| 定義 | Function getByGenre(bstrGenre As String) As IWMPPlaylist |
| getByNameメソッド | |
| 説明 | 指定した名前のメディア項目を含むPlaylistオブジェクトを取得する |
| 定義 | Function getByName(bstrName As String) As IWMPPlaylist |
| getMediaAtomメソッド | |
| 説明 | 指定したプロパティが使用可能なプロパティのセット内に存在するインデックスを取得する |
| 定義 | Function getMediaAtom(bstrItemName As String) As Long |
| getPlaylistByQueryメソッド | |
| 説明 | クエリ条件に一致するMediaオブジェクトを含むPlaylistオブジェクトを取得する |
| 定義 | Function getPlaylistByQuery(pQuery As IWMPQuery, bstrMediaType As String, bstrSortAttribute As String, fSortAscending As Boolean) As IWMPPlaylist |
| getStringCollectionByQueryメソッド | |
| 説明 | クエリ条件に一致する文字列を含むStringCollectionオブジェクトを取得する |
| 定義 | Function getStringCollectionByQuery(bstrAttribute As String, pQuery As IWMPQuery, bstrMediaType As String, bstrSortAttribute As String, fSortAscending As Boolean) As IWMPStringCollection |
| isDeletedメソッド | |
| 説明 | 指定したメディア項目が削除済アイテムフォルダ内にあるかどうかを取得する(Trueの場合、削除済) |
| 定義 | Function isDeleted(pItem As IWMPMedia) As Boolean |
| removeメソッド | |
| 説明 | メディア コレクションから項目を削除する |
| 定義 | Sub remove(pItem As IWMPMedia, varfDeleteFile As Boolean) |
| setDeletedメソッド | |
| 説明 | 指定したメディア項目を削除済アイテムフォルダに移動する |
| 定義 | Sub setDeleted(pItem As IWMPMedia, varfIsDeleted As Boolean) |
Mediaオブジェクト(IWMPMedia)の詳細
Mediaオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。
| attributeCountプロパティ(読み取り専用) | |
| 説明 | メディア項目に関連付けられている属性の数を取得 |
| 定義 | Property attributeCount() As Long |
| durationプロパティ(読み取り専用) | |
| 説明 | メディア項目の長さを秒単位で取得 |
| 定義 | Property duration() As Double |
| durationStringプロパティ(読み取り専用) | |
| 説明 | メディア項目の長さをHH:MM:SS形式で取得 |
| 定義 | Property durationString() As String |
| Errorプロパティ(読み取り専用) | |
| 説明 | メディア項目にエラーがある場合、ErrorItemオブジェクトを取得 |
| 定義 | Property Error() As IWMPErrorItem |
| getAttributeCountByTypeメソッド | |
| 説明 | 指定した属性名と言語に関連付けられている属性の数を取得する |
| 定義 | Function getAttributeCountByType(bstrType As String, bstrLanguage As String) As Long |
| getAttributeNameメソッド | |
| 説明 | 指定したインデックスに対応する属性の名前を取得する |
| 定義 | Function getAttributeName(lIndex As Long) As String |
| getItemInfoメソッド | |
| 説明 | メディア項目の指定した属性の値を取得する |
| 定義 | Function getItemInfo(bstrItemName As String) As String |
| getItemInfoByAtomメソッド | |
| 説明 | 指定したインデックス番号を持つ属性の値を取得する |
| 定義 | Function getItemInfoByAtom(lAtom As Long) As String |
| getItemInfoByTypeメソッド | |
| 説明 | 指定した属性名、言語、インデックスに対応する属性の値を取得する |
| 定義 | Function getItemInfoByType(bstrType As String, bstrLanguage As String, lIndex As Long) As Variant |
| getMarkerNameメソッド | |
| 説明 | 指定したインデックス位置にあるマーカーの名前を取得する |
| 定義 | Function getMarkerName(MarkerNum As Long) As String |
| getMarkerTimeメソッド | |
| 説明 | 指定したインデックス位置のマーカーの時刻を取得する |
| 定義 | Function getMarkerTime(MarkerNum As Long) As Double |
| imageSourceHeightプロパティ(読み取り専用) | |
| 説明 | メディア項目の高さをピクセル単位で取得 |
| 定義 | Property imageSourceHeight() As Long |
| imageSourceWidthプロパティ(読み取り専用) | |
| 説明 | メディア項目の幅をピクセル単位で取得 |
| 定義 | Property imageSourceWidth() As Long |
| isIdenticalプロパティ(読み取り専用) | |
| 説明 | 指定したオブジェクトが現在のオブジェクトと同じかどうかを取得(Trueの場合、同じオブジェクト) |
| 定義 | Property isIdentical(pIWMPMedia As IWMPMedia) As Boolean |
| isMemberOfメソッド | |
| 説明 | 指定したメディア項目が指定したプレイリストのメンバーであるかどうかを取得する(Trueの場合、プレイリストのメンバー) |
| 定義 | Function isMemberOf(pPlaylist As IWMPPlaylist) As Boolean |
| isReadOnlyItemメソッド | |
| 説明 | 指定したメディア項目の属性が読み取り専用かどうかを取得する(Trueの場合、読み取り専用) |
| 定義 | Function isReadOnlyItem(bstrItemName As String) As Boolean |
| markerCountプロパティ(読み取り専用) | |
| 説明 | メディア項目内のマーカーの数を取得 |
| 定義 | Property markerCount() As Long |
| nameプロパティ | |
| 説明 | メディア項目の名前を設定/取得 |
| 定義 | Property name() As String |
| setItemInfoメソッド | |
| 説明 | メディア項目の指定した属性の値を設定する |
| 定義 | Sub setItemInfo(bstrItemName As String, bstrVal As String) |
| sourceURLプロパティ(読み取り専用) | |
| 説明 | メディア項目のURLを取得 |
| 定義 | Property sourceURL() As String |
サンプル・プログラム(3)~MediaCollectionオブジェクトに含まれるMediaオブジェクトの名前を一覧表示
MediaCollectionオブジェクトに含まれるMediaオブジェクトの名前をExcelシートに一覧表示するプログラムです。
行番号7でMediaCollectionオブジェクトを取得し、行番号8~10の処理をCountプロパティの数だけ実行します。
行番号9でMediaオブジェクトのNameプロパティの内容をExcelシートのA列にセットしています。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim mc As IWMPMediaCollection
- Dim i As Long
- Private Sub Sample3()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set mc = wmp.mediaCollection
- For i = 0 To mc.getAll().Count – 1
- sht.Cells(i + 1, 1) = mc.getAll().Item(i).Name
- Next i
- Set mc = Nothing
- Set wmp = Nothing
- End Sub
サンプル・プログラム(4)~MediaCollectionオブジェクトにMediaオブジェクトを追加
ExcelシートのA列に入力された音楽ファイルのフルパスがMediaCollectionオブジェクトに未登録であれば、Mediaオブジェクトを追加するプログラムです。
行番号9でMediaCollectionオブジェクトを取得し、行番号10~21の処理をExcelシートのA列に入力された音楽ファイルの数だけ実行します。
行番号11~15の処理をMediaCollectionオブジェクトのCountプロパティの数だけ繰返し、行番号12で音楽ファイルのパスが登録済かどうかを確認、未登録であれば行番号17でMediaオブジェクトを追加します。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim mc As IWMPMediaCollection
- Dim rcnt, mcnt As Long
- Private Sub Sample4()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set mc = wmp.mediaCollection
- For rcnt = 1 To sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
- For mcnt = 0 To mc.getAll().Count – 1
- If sht.Cells(rcnt, 1) = mc.getAll().Item(mcnt).SourceUrl Then
- Exit For
- End If
- Next mcnt
- If mcnt > mc.getAll().Count – 1 Then
- mc.Add (sht.Cells(rcnt, 1))
- mcnt = mc.getAll().Count – 1
- End If
- pl.appendItem pIWMPMedia:=mc.getAll().Item(mcnt)
- Next rcnt
- Set mc = Nothing
- Set wmp = Nothing
- End Sub
サンプル・プログラム(5)~Mediaオブジェクトの属性名を一覧表示
MediaオブジェクトのgetItemInfoメソッドやsetItemInfoメソッドのbstrItemName引数に指定可能な属性名をExcelシートに一覧表示するプログラムです。
行番号9でMediaCollectionオブジェクトを取得し、行番号10~12の処理をMediaオブジェクトのattributeCountプロパティの数だけ繰返し、行番号11で属性名をExcelシートのA列にセットしています。
(※)属性の詳細については、Microsoftのサイト(Windows Media Player 属性リファレンス)を参照して下さい。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim mc As IWMPMediaCollection
- Dim i As Long
- Private Sub Sample5()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set mc = wmp.mediaCollection
- For i = 0 To mc.getAll().Item(0).attributeCount – 1
- sht.Cells(i + 1, 1) = mc.getAll().Item(0).getAttributeName(i)
- Next i
- Set mc = Nothing
- Set wmp = Nothing
- End Sub
サンプル・プログラム(6)~Mediaオブジェクトの属性値を一覧表示
MediaCollectionオブジェクトに含まれるMediaオブジェクトの属性値をExcelシートに一覧表示するプログラムです。
このサンプル・プログラムは音楽ファイルを対象としており、ExcelシートのA列に「アルバム名」、B列に「トラック番号」、C列に「アーティスト名」、D列に「曲名」を表示しています。
行番号9でMediaCollectionオブジェクトを取得し、行番号10~15の処理をMediaCollectionオブジェクトのCountプロパティの数だけ繰返し、行番号11~14で「アルバム名」「トラック番号」「アーティスト名」「曲名」をExcelシートにセットしています。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim mc As IWMPMediaCollection
- Dim i As Long
- Private Sub Sample6()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set mc = wmp.mediaCollection
- For i = 0 To mc.getAll().Count – 1
- sht.Cells(i + 1, 1) = mc.getAll().Item(i).getItemInfo(“WM/AlbumTitle")
- sht.Cells(i + 1, 2) = mc.getAll().Item(i).getItemInfo(“WM/TrackNumber")
- sht.Cells(i + 1, 3) = mc.getAll().Item(i).getItemInfo(“Author")
- sht.Cells(i + 1, 4) = mc.getAll().Item(i).getItemInfo(“Title")
- Next i
- Set mc = Nothing
- Set wmp = Nothing
- End Sub
プレイリストに関するオブジェクト(PlaylistCollectionオブジェクト、Playlistオブジェクト)の詳細
プレイリストに関するオブジェクトとして、プレイリストのコレクションを表すPlaylistCollectionオブジェクト、個々のプレイリストを表すPlaylistオブジェクトについて、詳細を説明します。
PlaylistCollectionオブジェクト(IWMPPlaylistCollection)の詳細
PlaylistCollectionオブジェクトで提供されているメソッドは下表の通りです(プロパティはありません)。
| getAllメソッド | |
| 説明 | ライブラリ内の全てのプレイリストを含むPlaylistArrayオブジェクトを取得する |
| 定義 | Function getAll() As IWMPPlaylistArray |
| getByNameメソッド | |
| 説明 | 指定した名前のプレイリストを含むPlaylistArrayオブジェクトを取得する |
| 定義 | Function getByName(bstrName As String) As IWMPPlaylistArray |
| importPlaylistメソッド | |
| 説明 | ライブラリに静的プレイリストを追加する |
| 定義 | Function importPlaylist(pItem As IWMPPlaylist) As IWMPPlaylist |
| isDeletedメソッド | |
| 説明 | 指定したプレイリストが削除済アイテムフォルダ内にあるかどうかを取得する(Trueの場合、削除済) |
| 定義 | Function isDeleted(pItem As IWMPPlaylist) As Boolean |
| newPlaylistメソッド | |
| 説明 | ライブラリに新しいプレイリストを作成する |
| 定義 | Function newPlaylist(bstrName As String) As IWMPPlaylist |
| removeメソッド | |
| 説明 | ライブラリからプレイリストを削除する |
| 定義 | Sub remove(pItem As IWMPPlaylist) |
| setDeletedメソッド | |
| 説明 | プレイリストを削除済アイテムフォルダに移動する |
| 定義 | Sub setDeleted(pItem As IWMPPlaylist, varfIsDeleted As Boolean) |
Playlistオブジェクト(IWMPPlaylist)の詳細
Playlistオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。
| appendItemメソッド | |
| 説明 | プレイリストの末尾にメディア項目を追加する |
| 定義 | Sub appendItem(pIWMPMedia As IWMPMedia) |
| attributeCountプロパティ(読み取り専用) | |
| 説明 | プレイリストに関連付けられている属性の数を取得 |
| 定義 | Property attributeCount() As Long |
| attributeNameプロパティ(読み取り専用) | |
| 説明 | インデックスで指定された属性の名前を取得 |
| 定義 | Property attributeName(lIndex As Long) As String |
| clearメソッド | |
| 説明 | プレイリストから全てのメディア項目を削除する |
| 定義 | Sub clear() |
| countプロパティ(読み取り専用) | |
| 説明 | プレイリスト内の項目の数を取得 |
| 定義 | Property count() As Long |
| getItemInfoメソッド | |
| 説明 | プレイリスト属性の値を取得する |
| 定義 | Function getItemInfo(bstrName As String) As String |
| insertItemメソッド | |
| 説明 | プレイリストの指定した場所にメディア項目を挿入する |
| 定義 | Sub insertItem(lIndex As Long, pIWMPMedia As IWMPMedia) |
| isIdenticalプロパティ(読み取り専用) | |
| 説明 | 指定したオブジェクトが現在のオブジェクトと同じかどうかを取得(Trueの場合、同じオブジェクト) |
| 定義 | Property isIdentical(pIWMPPlaylist As IWMPPlaylist) As Boolean |
| Itemプロパティ(読み取り専用) | |
| 説明 | 指定したインデックス位置にあるメディア項目を取得 |
| 定義 | Property Item(lIndex As Long) As IWMPMedia |
| moveItemメソッド | |
| 説明 | プレイリスト内の項目の位置を変更する |
| 定義 | Sub moveItem(lIndexOld As Long, lIndexNew As Long) |
| nameプロパティ | |
| 説明 | プレイリストの名前を設定/取得 |
| 定義 | Property name() As String |
| removeItemメソッド | |
| 説明 | プレイリストから指定した項目を削除する |
| 定義 | Sub removeItem(pIWMPMedia As IWMPMedia) |
| setItemInfoメソッド | |
| 説明 | プレイリスト属性の値を設定する |
| 定義 | Sub setItemInfo(bstrName As String, bstrValue As String) |
サンプル・プログラム(7)~PlaylistオブジェクトにMediaオブジェクトを追加し、属性値を一覧表示
ExcelシートのA列に入力された音楽ファイルのフルパスからMediaオブジェクトを作成し、Playlistオブジェクトに追加したうえ、Mediaオブジェクトの属性値をExcelシートに一覧表示するプログラムです。
このサンプル・プログラムは音楽ファイルを対象としており、ExcelシートのB列に「アルバム名」、C列に「トラック番号」、D列に「アーティスト名」、E列に「曲名」を表示しています。
行番号9でPlaylistオブジェクトを新規作成し、行番号10~12の処理をExcelシートのA列に入力された音楽ファイルの数だけ実行します。
行番号11で音楽ファイルのフルパスからMediaオブジェクトを新規作成し、Playlistオブジェクトに追加しています。
行番号13~18の処理をPlaylistオブジェクトのCountプロパティの数だけ繰返し、行番号14~17で「アルバム名」「トラック番号」「アーティスト名」「曲名」をExcelシートにセットしています。
なお、できあがったPlaylistオブジェクトをPlayerオブジェクトのcurrentPlaylistプロパティに設定すれば、プレイリストの再生が開始されます。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim pl As IWMPPlaylist
- Dim rcnt, i As Long
- Private Sub Sample7()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set pl = wmp.newPlaylist(“test", “")
- For rcnt = 1 To sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
- pl.appendItem pIWMPMedia:=wmp.newMedia(sht.Cells(rcnt, 1))
- Next rcnt
- For i = 0 To pl.Count – 1
- sht.Cells(i + 1, 2) = pl.Item(i).getItemInfo(“WM/AlbumTitle")
- sht.Cells(i + 1, 3) = pl.Item(i).getItemInfo(“WM/TrackNumber")
- sht.Cells(i + 1, 4) = pl.Item(i).getItemInfo(“Author")
- sht.Cells(i + 1, 5) = pl.Item(i).getItemInfo(“Title")
- Next i
- Set pl = Nothing
- Set wmp = Nothing
- End Sub
サンプル・プログラム(8)~Playlistオブジェクトの属性名を一覧表示
PlaylistオブジェクトのgetItemInfoメソッドやsetItemInfoメソッドのbstrName引数に指定可能な属性名をExcelシートに一覧表示するプログラムです。
行番号9でPlaylistオブジェクトを新規作成し、行番号10~12の処理をPlaylistオブジェクトのattributeCountプロパティの数だけ繰返し、行番号11で属性名をExcelシートのA列にセットしています。
(※)属性の詳細については、Microsoftのサイト(Windows Media Player 属性リファレンス)を参照して下さい。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim pl As IWMPPlaylist
- Dim i As Long
- Private Sub Sample8()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set pl = wmp.newPlaylist(“test", “")
- For i = 0 To pl.attributeCount – 1
- sht.Cells(i + 1, 1) = pl.attributeName(i)
- Next i
- Set pl = Nothing
- Set wmp = Nothing
- End Sub
CDに関するオブジェクト(CdromCollectionオブジェクト、Cdromオブジェクト、CdromRipオブジェクト、CdromBurnオブジェクト)の詳細
CDに関するオブジェクトとして、CD/DVDドライブのコレクションを表すCdromCollectionオブジェクト、個々のCD/DVDドライブを表すCdromオブジェクト、オーディオCDの読み込みに関するCdromRipオブジェクト、オーディオCDの書き込みに関するCdromBurnオブジェクトについて、詳細を説明します。
CdromCollectionオブジェクト(IWMPCdromCollection)の詳細
CdromCollectionオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。
| countプロパティ(読み取り専用) | |
| 説明 | システムで使用可能なCD/DVDドライブの数を取得 |
| 定義 | Property count() As Long |
| getByDriveSpecifierメソッド | |
| 説明 | 特定のドライブ文字に関連付けられているCdromオブジェクトを取得する |
| 定義 | Function getByDriveSpecifier(bstrDriveSpecifier As String) As IWMPCdrom |
| Itemメソッド | |
| 説明 | 指定したインデックス位置にあるCdromオブジェクトを取得する |
| 定義 | Function Item(lIndex As Long) As IWMPCdrom |
Cdromオブジェクト(IWMPCdrom)の詳細
Cdromオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。
| driveSpecifierプロパティ(読み取り専用) | |
| 説明 | CD/DVDドライブ文字を取得 |
| 定義 | Property driveSpecifier() As String |
| ejectメソッド | |
| 説明 | ドライブからCD/DVDを取り出す |
| 定義 | Sub eject() |
| Playlistプロパティ(読み取り専用) | |
| 説明 | CDのトラックまたはDVDのルートレベルのタイトルエントリを表すPlaylistオブジェクトを取得 |
| 定義 | Property Playlist() As IWMPPlaylist |
CdromRipオブジェクト(IWMPCdromRip)の詳細
CdromRipオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。
| ripProgressプロパティ(読み取り専用) | |
| 説明 | CDリッピングの進行状況を完了率として取得 |
| 定義 | Property ripProgress() As Long |
| ripStateプロパティ(読み取り専用) | |
| 説明 | リッピングプロセスの状態を取得
(※)WMPRipState列挙体の値は、以下の通り。 |
| 定義 | Property ripState() As WMPRipState |
| startRipメソッド | |
| 説明 | CDをリッピングする |
| 定義 | Function startRip() As HRESULT |
| stopRipメソッド | |
| 説明 | CDのリッピングプロセスを停止する |
| 定義 | Function stopRip() As HRESULT |
Microsoftのドキュメントには「リッピングするCDのIWMPCdromインターフェイスをキャストして 、IWMPCdromRipインターフェイスを取得します」と記載されていますが、Cdromオブジェクトと同じアドレスを割り当てれば良いだけなので、以下のように記述すれば使用可能になります。
行番号5を「Set cd = wmp.cdromcollection.getByDriveSpecifier(“D:")」と記述しても大丈夫です。
- Dim cr As IWMPCdrom
- Dim cd As IWMPCdromRip
- Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
- Set cd = cr
CdromBurnオブジェクト(IWMPCdromBurn)の詳細
CdromBurnオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。
| burnFormatプロパティ | |
| 説明 | 書き込むCDの種類を取得
(※)WMPBurnFormat列挙体の値は、以下の通り。 |
| 定義 | Property burnFormat() As WMPBurnFormat |
| burnPlaylistプロパティ | |
| 説明 | CDに書き込むプレイリストを設定/取得 |
| 定義 | Property burnPlaylist() As IWMPPlaylist |
| burnProgressプロパティ(読み取り専用) | |
| 説明 | CD書き込みの進行状況を完了率として取得 |
| 定義 | Property burnProgress() As Long |
| burnStateプロパティ(読み取り専用) | |
| 説明 | 書き込みプロセスの状態を取得
(※)WMPBurnState列挙体の値は、以下の通り。 |
| 定義 | Property burnState() As WMPBurnState |
| eraseメソッド | |
| 説明 | CDを消去する |
| 定義 | Function erase() As HRESULT |
| getItemInfoメソッド | |
| 説明 | CDの指定した属性の値を取得する
(※)bstrItem引数に指定可能な値は、以下の通り。 |
| 定義 | Function getItemInfo(bstrItem As String) As String |
| isAvailableメソッド | |
| 説明 | CDドライブとメディアに関する情報を取得する
(※)bstrItem引数に指定可能な値は、以下の通り。 |
| 定義 | Function isAvailable(bstrItem As String) As Boolean |
| labelプロパティ | |
| 説明 | CDボリュームラベル文字列を設定/取得 |
| 定義 | Property label() As String |
| refreshStatusメソッド | |
| 説明 | 現在のBurnプレイリストの状態情報を更新する |
| 定義 | Function refreshStatus() As HRESULT |
| startBurnメソッド | |
| 説明 | CDを書き込む |
| 定義 | Function startBurn() As HRESULT |
| stopBurnメソッド | |
| 説明 | CD書き込みプロセスを停止する |
| 定義 | Function stopBurn() As HRESULT |
Microsoftのドキュメントには「書き込むCDのIWMPCdromインターフェイスをキャストすることで、IWMPCdromBurnインターフェイスを取得します」と記載されていますが、Cdromオブジェクトと同じアドレスを割り当てれば良いだけなので、以下のように記述すれば使用可能になります。
行番号5を「Set cb = wmp.cdromcollection.getByDriveSpecifier(“D:")」と記述しても大丈夫です。
- Dim cr As IWMPCdrom
- Dim cb As IWMPCdromBurn
- Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
- Set cb = cr
サンプル・プログラム(9)~CD Playlistに含まれるMediaオブジェクトの属性値を一覧表示
CD Playlistに含まれるMediaオブジェクト(トラックに相当)の属性値をExcelシートに一覧表示するプログラムです。
このサンプル・プログラムは音楽CDを対象としており、ExcelシートのB列に「アルバム名」、C列に「トラック番号」、D列に「アーティスト名」、E列に「曲名」を表示しています。
行番号10~11でDドライブの音楽CDからPlaylistオブジェクトを取得し、行番号12~17の処理をPlaylistオブジェクトのCountプロパティの数だけ繰返し、行番号13~16で「アルバム名」「トラック番号」「アーティスト名」「曲名」をExcelシートにセットしています。
なお、CD PlaylistをPlayerオブジェクトのcurrentPlaylistプロパティに設定すれば、CD の再生が開始されます。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim cr As IWMPCdrom
- Dim pl As IWMPPlaylist
- Dim i As Long
- Private Sub Sample9()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
- Set pl = cr.Playlist
- For i = 0 To pl.Count – 1
- sht.Cells(i + 1, 1) = pl.Item(i).getItemInfo(“WM/AlbumTitle")
- sht.Cells(i + 1, 2) = pl.Item(i).getItemInfo(“WM/TrackNumber")
- sht.Cells(i + 1, 3) = pl.Item(i).getItemInfo(“Author")
- sht.Cells(i + 1, 4) = pl.Item(i).getItemInfo(“Title")
- Next i
- Set pl = Nothing
- Set cr = Nothing
- Set wmp = Nothing
- End Sub
サンプル・プログラム(10)~CDをリッピングしてMP3ファイルを作成
音楽CDをリッピングしてMP3ファイルを作成するプログラムです。
まずCD PlaylistをExcelシートに一覧表示して一旦停止し、取り込み対象を決定してから処理を再開すると、音楽CDをリッピングしてMP3ファイルを作成します。
行番号11~13でDドライブの音楽CDからPlaylistオブジェクトを取得し、行番号14~20の処理をPlaylistオブジェクトのCountプロパティの数だけ繰返し、行番号15~19で「取り込み要否」「アルバム名」「トラック番号」「アーティスト名」「曲名」をExcelシートにセットして一旦停止します。
ExcelシートのA列に表示される「取り込み要否」が『True』のトラックが取り込み対象になりますので、必要に応じて修正を行った後、プログラムの処理を再開します。
行番号22~28でExcelシートの「取り込み要否」の内容をMediaオブジェクトのSelectedForRip属性に設定し、行番号29でリッピングを開始。行番号30~32でリッピング終了まで待機し、行番号33でCDを排出しています。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim cr As IWMPCdrom
- Dim cd As IWMPCdromRip
- Dim pl As IWMPPlaylist
- Dim i As Long
- Private Sub Sample10()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
- Set cd = cr
- Set pl = cr.Playlist
- For i = 0 To pl.Count – 1
- sht.Cells(i + 1, 1) = pl.Item(i).getItemInfo(“SelectedForRip")
- sht.Cells(i + 1, 2) = pl.Item(i).getItemInfo(“WM/AlbumTitle")
- sht.Cells(i + 1, 3) = pl.Item(i).getItemInfo(“WM/TrackNumber")
- sht.Cells(i + 1, 4) = pl.Item(i).getItemInfo(“Author")
- sht.Cells(i + 1, 5) = pl.Item(i).getItemInfo(“Title")
- Next i
- Stop
- For i = 1 To sht.Cells(sht.Rows.Count, 2).End(xlUp).Row
- If sht.Cells(i, 1) = True Then
- pl.Item(i – 1).setItemInfo bstrItemName:="SelectedForRip", bstrVal:="True"
- Else
- pl.Item(i – 1).setItemInfo bstrItemName:="SelectedForRip", bstrVal:="False"
- End If
- Next i
- cd.startRip
- Do Until cd.ripState = wmprsStopped
- DoEvents
- Loop
- cr.eject
- Set pl = Nothing
- Set cd = Nothing
- Set cr = Nothing
- Set wmp = Nothing
- End Sub
CdromRipオブジェクトに関する補足説明
CdromRipオブジェクトは少しクセがあってわかり難いので、サンプル・プログラム(10)に沿って補足説明をしておきます。
(1)MP3ファイルの作成
CdromRipオブジェクトのstartRipメソッドを実行すると、WMPの[ツール]-[オプション]-[音楽の取り込み]で設定した方法で取り込まれます。
MP3ファイルを作成するのであれば、予め「取り込みの設定」で「形式」を『MP3』に設定しておく必要があります(下図参照)。

(2)MediaオブジェクトのSelectedForRip属性
MediaオブジェクトのSelectedForRip属性は、WMPで音楽CDを取り込む際に表示されるトラック一覧(下図参照)の左端のチェックボックスに対応しており、チェックされた状態(『True』)のトラックが取り込み対象になります。
WMPがCDを読み込んだ際、ライブラリに取り込まれていないトラックには『True』、取り込み済のトラックには『False』が設定されます。
なお、前掲のサンプル・プログラム(5)でMediaオブジェクトの属性名を一覧表示してもSelectedForRip属性は表示されません。

(3)CDリッピングを行う際の留意事項
MediaオブジェクトのSelectedForRip属性の確認を行わずにCDをリッピングするだけであれば、前半のPlaylistを表示する処理等(行番号14~28)は不要ですが、行番号13「Set pl = cr.Playlist」の記述は残しておかないとリッピングされません。
Microsoftのドキュメントには記載されていませんが、有識者の方々が公開されている情報によると、「Cdromオブジェクトの機能を使用しないと、アドレスが有効にならない」とのことです。
なお、筆者の場合は「Set pl = cr.Playlist」を追加してもリッピングが開始されず、エラーにもならずに処理が終了してしまうという事象に悩まされましたが、そのPC環境ではWMPでCDのリッピングを行ったことがなかったため、「取り込みオプション(下図参照)」が未設定だったことが原因でした。
一度設定してしまえば、この画面が表示されることはなく、正常にリッピングできるようになります。

(4)シンプルにCDリッピングだけを行うプログラム
WMPの設定に従って無条件にCDリッピングを行うだけであれば、以下のようなコードで実現可能です。
- Dim wmp As WindowsMediaPlayer
- Dim cr As IWMPCdrom
- Dim cd As IWMPCdromRip
- Dim pl As IWMPPlaylist
- Private Sub Sample10()
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
- Set cd = cr
- Set pl = cr.Playlist
- cd.startRip
- Do Until cd.ripState = wmprsStopped
- DoEvents
- Loop
- cr.eject
- Set pl = Nothing
- Set cd = Nothing
- Set cr = Nothing
- Set wmp = Nothing
- End Sub
サンプル・プログラム(11)~Excelシートで指定した音楽ファイルをCDに書き込み
予めExcelシートのA列に音楽ファイルのフルパスを入力しておき、その内容をプレリストとして音楽CDに書き込むプログラムです。
行番号11でPlaylistオブジェクトを新規作成し、行番号12~14の処理をExcelシートのA列に入力された音楽ファイルの数だけ実行します。
行番号13で音楽ファイルのフルパスからMediaオブジェクトを新規作成し、Playlistオブジェクトに追加しています。
行番号15~16でDドライブを書き込み用のドライブとして設定し、行番号17~19で書き込みの準備を行った後、書き込み可能な状態であれば、行番号21で書き込みを開始。行番号22~24で書き込み終了まで待機し、行番号26でCDを排出しています。
- Dim sht As Worksheet
- Dim wmp As WindowsMediaPlayer
- Dim pl As IWMPPlaylist
- Dim cr As IWMPCdrom
- Dim cb As IWMPCdromBurn
- Dim rcnt As Long
- Private Sub Sample11()
- Set sht = ActiveSheet
- Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
- Set pl = wmp.newPlaylist(“test", “")
- For rcnt = 1 To sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
- pl.appendItem pIWMPMedia:=wmp.newMedia(sht.Cells(rcnt, 1))
- Next rcnt
- Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
- Set cb = cr
- cb.burnFormat = WMPBurnFormat.wmpbfAudioCD
- cb.burnPlaylist = pl
- cb.refreshStatus
- If (cb.isAvailable(“Burn") = True) And (cb.isAvailable(“Disc") = True) And (cb.isAvailable(“Write") = True) And (cb.burnState = WMPBurnState.wmpbsReady) Then
- cb.startBurn
- Do Until cb.burnState = wmpbsStopped
- DoEvents
- Loop
- End If
- cr.eject
- Set cb = Nothing
- Set cr = Nothing
- Set pl = Nothing
- Set wmp = Nothing
- End Sub
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ






ディスカッション
コメント一覧
まだ、コメントがありません