为 ASF 文件编制索引

[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

为 ASF 文件编制索引的过程非常简单。 调用 IWMIndexer::StartIndexing 并传递文件名。 其余操作由索引器执行。 对 StartIndexing 的 调用是异步的,因此必须使用 OnStatus 回调监视状态。

以下代码演示如何为 ASF 文件编制索引。 如果要在为文件编制索引之前配置索引器,则需要包含 配置索引器中包含的示例中的代码。

对于此示例,指向 事件的句柄必须创建为全局变量,以便回调可以访问该句柄。 以下声明应出现在全局范围内。

HANDLE g_hEvent = NULL;

在更现实的方案中,事件句柄应该是 类的数据成员,该类同时包含用于启动索引器的回调和逻辑。

在调用 IWMIndexer::StartIndexing 后,索引器将多个事件发送到 OnStatus 回调。 可以根据应用程序需要捕获它们。 至少需要捕获WMT_CLOSED,该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;

在本示例中,假定通过名为 MyCallback 的对象访问 OnStatus 回调的实现。 有关通过此 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

使用索引