ASF ファイルのインデックスを作成するには
[このページに関連付けられている機能である Windows Media Format 11 SDK は、従来の機能です。 ソース リーダーとシンク ライターに置き換わりました。 ソース リーダーとシンク ライターは、Windows 10とWindows 11用に最適化されています。 Microsoft では、可能であれば、新しいコードで Windows Media Format 11 SDK ではなくソース リーダーとシンク ライターを使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
ASF ファイルのインデックス作成プロセスは非常に簡単です。 IWMIndexer::StartIndexing を呼び出し、ファイル名を渡します。 インデクサーは残りの処理を行います。 StartIndexing の呼び出しは非同期であるため、OnStatus コールバックを使用して状態を監視する必要があります。
次のコードは、ASF ファイルのインデックスを作成する方法を示しています。 ファイルのインデックスを作成する前にインデクサーを構成する場合は、「 インデクサーを構成するには」に含まれている例のコードを含める必要があります。
この例では、イベントを指すハンドルをグローバル変数として作成して、コールバックからアクセスできるようにする必要があります。 次の宣言は、グローバル スコープに含まれている必要があります。
HANDLE g_hEvent = NULL;
より現実的なシナリオでは、イベント ハンドルは、インデクサーを開始するためのコールバックとロジックの両方を含む クラスのデータ メンバーである必要があります。
インデクサーは、IWMIndexer::StartIndexing の呼び出し後に OnStatus コールバックに複数のイベントを送信します。 アプリケーションに必要に応じてトラップできます。 少なくとも、インデックス作成が完了したときに送信されるWMT_CLOSEDをトラップする必要があります。 OnStatus コールバックの実装では、メッセージ スイッチ内で次のロジックを使用します。
// Inside the status switch statement.
case WMT_CLOSED:
// You may want to deal with the HRESULT value passed with the status.
// If you do, you should do it here.
// Signal the event.
SetEvent(g_hEvent);
break;
この例では、 OnStatus コールバックの実装が MyCallback というオブジェクトを介してアクセスされると想定されています。 この SDK でイベントとコールバックを使用する方法の詳細については、「 コールバック メソッドの使用」を参照してください。
IWMIndexer* pMyIndexer = NULL;
HRESULT hr = S_OK;
WCHAR pwszFileName[] = L"C:\SomeFile.wmv";
// Initialize COM.
hr = CoInitialize(NULL);
// Create an event for asynchronous calls.
g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
// Create an indexer.
hr = WMCreateIndexer(&pMyIndexer);
// TODO: Configure the indexer if needed. See To Configure the Indexer.
// Start the indexer.
hr = pMyIndexer->StartIndexing(pwszFileName, &MyCallback, NULL);
// Wait for the indexer to finish.
WaitForSingleObject(g_hEvent, INFINITE);
// Clean up.
pMyIndexer->Release();
pMyIndexer = NULL
CloseHandle(g_hEvent);
g_hEvent = NULL;
関連トピック