Compartir a través de


Para indexar un archivo ASF

[La característica asociada a esta página, WINDOWS Media Format 11 SDK, es una característica heredada. Se ha reemplazado por lector de origen y escritor receptor. Lector de origen y escritor receptor se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use lector fuente y escritor receptor en lugar del SDK de Windows Media Format 11, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

El proceso de indexación de un archivo ASF es muy sencillo. Realice una llamada a IWMIndexer::StartIndexing y pase el nombre de archivo. El indexador realiza el resto. La llamada a StartIndexing es asincrónica, por lo que el estado debe supervisarse mediante la devolución de llamada OnStatus .

En el código siguiente se muestra cómo indexar un archivo ASF. Si desea configurar el indexador antes de indexar el archivo, deberá incluir código del ejemplo incluido en Para configurar el indexador.

En este ejemplo, el identificador que apunta al evento debe crearse como una variable global para que la devolución de llamada pueda acceder a ella. La siguiente declaración debe aparecer en un ámbito global.

HANDLE g_hEvent = NULL;

En un escenario más realista, el identificador de eventos debe ser un miembro de datos de la clase que contiene la devolución de llamada y la lógica para iniciar el indexador.

El indexador envía varios eventos a la devolución de llamada OnStatus después de la llamada a IWMIndexer::StartIndexing. Puede interceptarlos según sea necesario para la aplicación. Como mínimo, debe interceptar WMT_CLOSED, que se envía cuando se completa la indexación. Use la siguiente lógica dentro del modificador de mensaje en la implementación de la devolución de llamada 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;

En este ejemplo se supone que se obtiene acceso a la implementación de la devolución de llamada OnStatus a través de un objeto denominado MyCallback. Para obtener más información sobre el uso de eventos y devoluciones de llamada con este SDK, consulte Uso de los métodos de devolución de llamada.

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 (Interfaz)

Para configurar el indexador

WMCreateIndexer

Trabajar con índices