Per indicizzare un file ASF

[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita dal lettore di origine e dal writer sink. Lettore di origine e writer sink sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi lettore di origine e writer sink anziché Windows Media Format 11 SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Il processo di indicizzazione di un file ASF è molto semplice. Effettuare una chiamata a IWMIndexer::StartIndexing e passare il nome del file. L'indicizzatore esegue il resto. La chiamata a StartIndexing è asincrona, quindi lo stato deve essere monitorato usando il callback OnStatus .

Il codice seguente illustra come indicizzare un file ASF. Se si vuole configurare l'indicizzatore prima dell'indicizzazione del file, sarà necessario includere il codice dell'esempio incluso in Per configurare l'indicizzatore.

Per questo esempio, l'handle che punta all'evento deve essere creato come variabile globale in modo che sia accessibile dal callback. La dichiarazione seguente deve essere visualizzata in un ambito globale.

HANDLE g_hEvent = NULL;

In uno scenario più realistico, l'handle di eventi deve essere un membro dati della classe che contiene sia il callback che la logica per l'avvio dell'indicizzatore.

L'indicizzatore invia diversi eventi al callback OnStatus dopo la chiamata a IWMIndexer::StartIndexing. È possibile intercettare tali file in base alle esigenze dell'applicazione. Come minimo, è necessario intercettare WMT_CLOSED, che viene inviato al termine dell'indicizzazione. Usare la logica seguente all'interno dell'opzione messaggio nell'implementazione del callback 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;

Per questo esempio si presuppone che l'implementazione del callback OnStatus sia accessibile tramite un oggetto denominato MyCallback. Per altre informazioni sull'uso di eventi e callback con questo SDK, vedere Uso dei metodi di callback.

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;

Interfaccia IWMIndexer

Per configurare l'indicizzatore

WMCreateIndexer

Operazioni con gli indici