Partager via


Pour indexer un fichier ASF

[La fonctionnalité associée à cette page, le Kit de développement logiciel (SDK) Windows Media Format 11, est une fonctionnalité héritée. Il a été remplacé par lecteur source et enregistreur récepteur. Le lecteur source et l’enregistreur récepteur ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise le lecteur source et l’enregistreur récepteur au lieu du Kit de développement logiciel (SDK) Windows Media Format 11, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Le processus d’indexation d’un fichier ASF est très simple. Appelez IWMIndexer::StartIndexing et transmettez le nom de fichier. L’indexeur effectue le reste. L’appel à StartIndexing étant asynchrone, status doivent être surveillés à l’aide du rappel OnStatus.

Le code suivant montre comment indexer un fichier ASF. Si vous souhaitez configurer l’indexeur avant d’indexer le fichier, vous devez inclure le code de l’exemple inclus dans Pour configurer l’indexeur.

Pour cet exemple, le handle qui pointe vers l’événement doit être créé en tant que variable globale afin qu’il soit accessible par le rappel. La déclaration suivante doit apparaître dans une étendue globale.

HANDLE g_hEvent = NULL;

Dans un scénario plus réaliste, le handle d’événement doit être un membre de données de la classe qui contient à la fois le rappel et la logique de démarrage de l’indexeur.

L’indexeur envoie plusieurs événements au rappel OnStatus après l’appel à IWMIndexer::StartIndexing. Vous pouvez les intercepter si nécessaire pour votre application. Au minimum, vous devez intercepter WMT_CLOSED, qui est envoyé une fois l’indexation terminée. Utilisez la logique suivante dans le commutateur de messages dans votre implémentation du rappel 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;

Pour cet exemple, il est supposé que votre implémentation du rappel OnStatus est accessible via un objet appelé MyCallback. Pour plus d’informations sur l’utilisation d’événements et de rappels avec ce sdk, consultez Utilisation des méthodes de rappel.

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 Interface

Pour configurer l’indexeur

WMCreateIndexer

Utilisation des index