Para indexar um arquivo ASF
[A funcionalidade associada a esta página, Windows Media Format 11 SDK, é uma funcionalidade herdada. Foi substituído por Source Reader e Sink Writer. do Source Reader e Sink Writer foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize Source Reader e Sink Writer em vez de Windows Media Format 11 SDK, sempre que 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, por isso, o estado deve ser monitorado através do callback OnStatus .
O código a seguir mostra como indexar um arquivo ASF. Se desejar configurar o indexador antes de indexar o arquivo, será necessário incluir o código do exemplo incluído em Configurar o indexador.
Neste exemplo, o identificador que aponta para o evento deve ser criado como uma variável global para que possa ser acedida pela função de retorno. A seguinte declaração deve figurar num âmbito global.
HANDLE g_hEvent = NULL;
Num cenário mais realista, o identificador de evento deve ser um atributo da classe que contém tanto o retorno de chamada quanto 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 intercetá-los conforme necessário para seu aplicativo. No mínimo, você precisa interceptar WMT_CLOSED, que é enviado quando a indexação é concluída. Utilize a seguinte lógica no switch de mensagem na sua 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;
Neste exemplo, supõe-se que sua 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 este 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;
Tópicos relacionados