Индексирование ASF-файла

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен средством чтения исходного кода и модуля записи приемника. Средство чтения исходного кода и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал средство чтения исходного кода и модуль записи приемника вместо пакета SDK для Windows Media Format 11. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Процесс индексирования ASF-файла очень прост. Вызовите IWMIndexer::StartIndexing и передайте имя файла. Индексатор выполняет все остальное. Вызов StartIndexing является асинхронным, поэтому состояние должно отслеживаться с помощью обратного вызова OnStatus .

В следующем коде показано, как индексировать ASF-файл. Если вы хотите настроить индексатор перед индексированием файла, необходимо включить код из примера, включенного в список Настройка индексатора.

В этом примере дескриптор, указывающий на событие, должен быть создан в качестве глобальной переменной, чтобы он был доступен для обратного вызова. Следующее объявление должно отображаться в глобальном область.

HANDLE g_hEvent = NULL;

В более реалистичном сценарии дескриптор события должен быть элементом данных класса , который содержит как обратный вызов, так и логику запуска индексатора.

Индексатор отправляет несколько событий обратному вызову OnStatus после вызова IWMIndexer::StartIndexing. Их можно отловить по мере необходимости для приложения. Как минимум необходимо отловить 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

Работа с индексами