Share via


So indizieren Sie eine ASF-Datei

[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Sie wurde durch den Quellleser und den Senkenschreiber ersetzt. Quellleser und Senkenschreiber wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit den Quellleser und senkenden Writer anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Die Indizierung einer ASF-Datei ist sehr einfach. Rufen Sie IWMIndexer::StartIndexing auf, und übergeben Sie den Dateinamen. Den Rest übernimmt der Indexer. Der Aufruf von StartIndexing ist asynchron, sodass status mithilfe des OnStatus-Rückrufs überwacht werden muss.

Der folgende Code zeigt, wie eine ASF-Datei indiziert wird. Wenn Sie den Indexer vor der Indizierung der Datei konfigurieren möchten, müssen Sie Code aus dem Beispiel in So konfigurieren Sie den Indexer einschließen.

In diesem Beispiel muss das Handle, das auf das Ereignis verweist, als globale Variable erstellt werden, damit der Rückruf darauf zugreifen kann. Die folgende Deklaration sollte in einem globalen Bereich angezeigt werden.

HANDLE g_hEvent = NULL;

In einem realistischeren Szenario sollte das Ereignishandle ein Datenmember der -Klasse sein, das sowohl den Rückruf als auch die Logik zum Starten des Indexers enthält.

Der Indexer sendet nach dem Aufruf von IWMIndexer::StartIndexing mehrere Ereignisse an den OnStatus-Rückruf. Sie können sie nach Bedarf für Ihre Anwendung abfangen. Mindestens müssen Sie WMT_CLOSED ein Trap ausführen, das gesendet wird, wenn die Indizierung abgeschlossen ist. Verwenden Sie die folgende Logik innerhalb des Nachrichtenschalters in Ihrer Implementierung des OnStatus-Rückrufs .

// 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;

In diesem Beispiel wird davon ausgegangen, dass auf Ihre Implementierung des OnStatus-Rückrufs über ein Objekt namens MyCallback zugegriffen wird. Weitere Informationen zur Verwendung von Ereignissen und Rückrufen mit diesem SDK finden Sie unter Verwenden der Rückrufmethoden.

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-Schnittstelle

So konfigurieren Sie den Indexer

WMCreateIndexer

Arbeiten mit Indizes