共用方式為


為 ASF 檔案編制索引

[與此頁面相關聯的功能 Windows Media Format 11 SDK是舊版功能。 來源讀取器和接收寫入器已取代它。 來源讀取器和接收寫入器已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用來源讀取器和接收寫入器,而不是Windows 媒體格式 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

使用索引