Indexování souboru ASF
[Funkce přidružená k této stránce, Windows Media Format 11 SDK, je starší funkce. Byl nahrazen čtečkou zdroje a zapisovačem datového toku. Zdrojový čtečka a zapisovač spotřebiče jsou optimalizovány pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód, pokud je to možné, používal Zdrojový čtenář a Zapisovač výstupů místo Windows Media Format 11 SDK. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]
Proces indexování souboru ASF je velmi jednoduchý. Proveďte volání IWMIndexer::StartIndexing a předejte název souboru. Indexátor udělá zbytek. Volání StartIndexing je asynchronní, takže stav musí být monitorován pomocí callbacku OnStatus.
Následující kód ukazuje, jak indexovat soubor ASF. Pokud chcete před indexováním souboru nakonfigurovat indexer, budete muset zahrnout kód z příkladu zahrnutého v Konfigurace indexeru.
V tomto příkladu musí být popisovač, který odkazuje na událost, vytvořen jako globální proměnná, aby byl přístupný zpětným voláním. Následující deklarace by se měla vyskytovat v globálním oboru.
HANDLE g_hEvent = NULL;
V realističtějším scénáři by popisovač událostí měl být datovým členem třídy, která obsahuje zpětné volání i logiku pro spuštění indexeru.
Indexer po volání IWMIndexer::StartIndexingodešle několik událostí ve zpětném volání OnStatus. Podle potřeby je můžete zachytit pro vaši aplikaci. Minimálně je potřeba zachytit WMT_CLOSED, které se odesílá po dokončení indexování. V implementaci OnStatus zpětného volání použijte následující logiku v rámci přepínače zpráv.
// 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;
V tomto příkladu se předpokládá, že k vaší implementaci zpětného volání OnStatus se přistupuje prostřednictvím objektu nazvaného MyCallback. Další informace o použití událostí a zpětných volání s touto sadou SDK najdete v tématu Použití metod zpětného volání.
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;
Související témata