2013年6月13日木曜日

現在の DVD ボリューム情報を取得する。

IDvdInfo2 インターフェイス
IDvdInfo2::GetDVDVolumeInfo

#include <dshow.h>

int main()
{
 IDvdGraphBuilder *m_pIDvdGB;
 IDvdInfo2 *m_pIDvdI2;

 CoInitialize(NULL);

 HRESULT hr;

 // DVD グラフ ビルダ オブジェクトのインスタンスを作成する。
 hr = CoCreateInstance(CLSID_DvdGraphBuilder,
  NULL,
  CLSCTX_INPROC_SERVER,
  IID_IDvdGraphBuilder,
  (LPVOID *)&m_pIDvdGB);

 // DVD フィルタ グラフを作成する。
 AM_DVD_RENDERSTATUS buildStatus;
 hr = m_pIDvdGB->RenderDvdVideoVolume(NULL, AM_DVD_HWDEC_PREFER, &buildStatus);

 // DVD ナビゲータ インターフェイスへのポインタを取得する。
 hr = m_pIDvdGB->GetDvdInterface(IID_IDvdInfo2, reinterpret_cast<void**>(&m_pIDvdI2));

 /* ディスク情報 */
 //現在の DVD ボリューム情報を取得する。
 ULONG pulNumOfVolumes;
 ULONG pulVolume;
 DVD_DISC_SIDE pSide;
 ULONG pulNumOfTitles;

 hr = m_pIDvdI2->GetDVDVolumeInfo(&pulNumOfVolumes,
  &pulVolume, 
  &pSide, 
  &pulNumOfTitles);

 if (SUCCEEDED(hr))
 {
  printf("ボリューム セット内のボリュームの数  : %u\n", pulNumOfVolumes);
  printf("このルート ディレクトリのボリューム番号: %u\n", pulVolume);
  switch (pSide) {
  case DVD_SIDE_A:
   printf("現在のディスク面                    ;サイド A\n");
   break;
  case DVD_SIDE_B:
   printf("現在のディスク面                    :サイド B\n");
   break;
  }
  printf("このボリュームで使えるタイトルの数     : %u\n", pulNumOfTitles);
 }

 MessageBox(0, 0, L"OK", 0);

 m_pIDvdI2->Release();
 m_pIDvdGB->Release();

 CoUninitialize();

 return 0;
}



0 件のコメント:

コメントを投稿