Arbeiten mit tragbaren Geräten

[Das dieser Seite zugeordnete Feature Windows Medienwiedergabe SDK ist ein Legacyfeature. Es wurde von MediaPlayer abgelöst. MediaPlayer wurde für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, mediaPlayer anstelle von Windows Medienwiedergabe SDK für neuen Code zu verwenden. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

In diesem Abschnitt wird beschrieben, wie Sie ein Remote-Windows Medienwiedergabe ActiveX-Steuerelement verwenden, um mit tragbaren Geräten zu arbeiten.

Die Codebeispiele in diesem Abschnitt verwenden ATL-Klassen (Active Template Library), z. B. CComPtr.

Eingeschlossene Header

Um den Code in diesem Abschnitt zu verwenden, schließen Sie die folgenden Header ein:

#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <commctrl.h>
#include "wmp.h"
#include "wmpids.h"

IWMPPlayer-Zeiger

Der IWMPPlayer-Zeiger wird in einer Membervariablen gespeichert.

CComPtr<IWMPPlayer> m_spPlayer;

Geräte werden in einem Array gespeichert.

Der Beispielcode greift auf die folgende Membervariable zu, die im Projektheader deklariert werden soll:

IWMPSyncDevice **m_ppWMPDevices; // Points to the custom device array.

Die Geräteanzahl wird in einer Membervariablen gespeichert.

int m_cDevices; // Count of devices.

Abrufen eines Gerätezeigers

Ein Zeiger auf ein bestimmtes Gerät wird über seinen Arrayindex mithilfe von Code wie dem folgenden abgerufen:

CComPtr<IWMPSyncDevice> spSyncDevice(m_ppWMPDevices[lIndex]);

Beachten Sie, dass der in den vorherigen Beispielen gezeigte Index nicht der Partnerschaftsindex für das Gerät ist. Dies ist der Index für das Gerät im benutzerdefinierten Array von Geräten.

Bereinigung

In den Beispielen wird die folgende Funktion verwendet, um den Speicher im Gerätearray freizugeben und die Schnittstellenzeiger freizugeben:

void CMainDlg::FreeDeviceArray()
{
    if(m_ppWMPDevices)
    {
        for(long i = 0; i < m_cDevices; i++)
        {
            m_ppWMPDevices[i]->Release();
        }
 
        delete[] m_ppWMPDevices;
        m_ppWMPDevices = NULL;        
    }
}

Geräte werden in einem Listenfeld angezeigt.

Die GetSelectedDeviceIndex-Funktion gibt mithilfe des folgenden Codes den Index des Geräts zurück, das der Benutzer in einem Listenfeld ausgewählt hat:

long CMainDlg::GetSelectedDeviceIndex()
{
    return (long)SendMessage(GetDlgItem(IDC_DEVICES), LB_GETCURSEL, 0, 0);
}

Der Benutzeroberflächenstatus wird von einer einzelnen Funktion verwaltet.

Die SetUIState-Funktion verwaltet die Benutzeroberfläche.

SetUIState(UIState 
NewState, BOOL 
bConnected)

Die Details dieser Funktion sind für die Diskussionen in diesem Abschnitt nicht relevant, aber beachten Sie, dass diese Funktion Aufgaben ausführt, z. B. das Aktivieren oder Deaktivieren von Steuerelementen und das Ändern von Anzeigetext in der Benutzeroberfläche.

Die UIState-Enumeration wurde wie folgt definiert:

enum UIState
{
    Partnership,
    NoPartnership,
    Synchronizing
};

Der bConnected-Parameter gibt an, ob die Benutzeroberfläche für ein verbundenes Gerät konfiguriert werden soll (TRUE bedeutet, dass das Gerät verbunden ist). Die Parameter NewState und bConnected übermitteln die Informationen, die für die Funktion erforderlich sind, um ihre Arbeit zu erledigen.

Die folgenden Abschnitte enthalten Erläuterungen zum Beispielcode:

Leitfaden zur Playersteuerung