Para indexar um arquivo ASF

[O recurso associado a esta página, Windows Media Format 11 SDK, é um recurso herdado. Ele foi substituído por Leitor de Origem e Gravador de Coletor. O Leitor de Origem e o Gravador de Coletor foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o Leitor de Origem e o Gravador de Coletor em vez do SDK do Windows Media Format 11, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O processo de indexação de um arquivo ASF é muito simples. Faça uma chamada para IWMIndexer::StartIndexing e passe o nome do arquivo. O indexador faz o resto. A chamada para StartIndexing é assíncrona, portanto, status deve ser monitorada usando o retorno de chamada onStatus.

O código a seguir mostra como indexar um arquivo ASF. Se você quiser configurar o indexador antes de indexar o arquivo, precisará incluir o código do exemplo incluído em Para Configurar o Indexador.

Para este exemplo, o identificador que aponta para o evento deve ser criado como uma variável global para que ele seja acessível pelo retorno de chamada. A declaração a seguir deve aparecer em um escopo global.

HANDLE g_hEvent = NULL;

Em um cenário mais realista, o identificador de evento deve ser um membro de dados da classe que contém o retorno de chamada e a lógica para iniciar o indexador.

O indexador envia vários eventos para o retorno de chamada onStatus após a chamada para IWMIndexer::StartIndexing. Você pode aprisioná-los conforme necessário para seu aplicativo. No mínimo, você precisa interceptar WMT_CLOSED, que é enviada quando a indexação é concluída. Use a lógica a seguir na opção de mensagem na implementação do retorno de chamada 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;

Para este exemplo, supõe-se que a implementação do retorno de chamada onStatus seja acessada por meio de um objeto chamado MyCallback. Para obter mais informações sobre como usar eventos e retornos de chamada com esse SDK, consulte Usando os métodos de retorno de chamada.

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 Interface

Para configurar o indexador

WMCreateIndexer

Trabalhando com índices