Индексирование ASF-файла
[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей.] Он был заменён на средство чтения источника и средство записи приёмника. Source Reader и Sink Writer оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, когда это возможно, использовать для нового кода средство источника чтения и средство приемника записи вместо пакета SDK для Windows Media 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;
Связанные разделы