共用方式為


若要編製 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;

IWMIndexer 介面

設定索引器

WMCreateIndexer

使用索引