Énumération des appareils
Lecteur Windows Media représente des appareils mobiles à l’aide de l’interface IWMPSyncDevice . L’exemple de code suivant montre une fonction qui crée un tableau de pointeurs vers IWMPSyncDevice. chaque pointeur dans le tableau représente un appareil pour lequel Lecteur Windows Media contient des informations stockées. il n’est pas nécessaire qu’un appareil soit connecté à l’ordinateur et qu’il ne soit pas obligé d’avoir un partenariat avec l’instance de Lecteur Windows Media actuelle.
Vous devez énumérer les appareils chaque fois que vous recevez l’événement DeviceConnect ou DeviceDisconnect .
La fonction suivante énumère les appareils. Le paramètre bConnectedOnly spécifie s’il faut énumérer uniquement les appareils actuellement connectés à l’ordinateur de l’utilisateur.
STDMETHODIMP CMainDlg::EnumDevices(BOOL bConnectedOnly)
{
HRESULT hr = S_OK;
CComPtr<IWMPSyncServices> spSyncServices;
long cDeviceArray = 0; // Size to make the array
long cAllDevices = 0; // Count of all devices
long cDeviceIndex = 0; // Index for adding devices to array.
CComPtr<IWMPSyncDevice> spTempDevice;
VARIANT_BOOL vbIsConnected = VARIANT_FALSE;
// Delete any existing array.
FreeDeviceArray();
// Retrieve a pointer to IWMPSyncServices.
hr = m_spPlayer->QueryInterface(&spSyncServices);
if(SUCCEEDED(hr) && spSyncServices.p)
{
hr = spSyncServices->get_deviceCount(&cAllDevices);
}
if(SUCCEEDED(hr) && cAllDevices > 0)
{
if(bConnectedOnly)
{
// Count the number of connected devices.
for(long i = 0; i < cAllDevices; i++)
{
spTempDevice.Release();
hr = spSyncServices->getDevice(i, &spTempDevice);
if(SUCCEEDED(hr) && spTempDevice.p)
{
spTempDevice->get_connected(&vbIsConnected);
if(vbIsConnected == VARIANT_TRUE)
{
// Count only the connected devices.
cDeviceArray++;
}
}
}
}
else
{
cDeviceArray = cAllDevices;
}
if(cDeviceArray == 0)
{
return hr;
}
// Cache the device count.
m_cDevices = cDeviceArray;
// Create a new device array.
m_ppWMPDevices = new IWMPSyncDevice*[cDeviceArray];
if(!m_ppWMPDevices)
{
return E_OUTOFMEMORY;
}
ZeroMemory(m_ppWMPDevices, sizeof (IWMPSyncDevice*) * cDeviceArray);
// Fill the array.
for(long i = 0; i < cAllDevices; i++)
{
spTempDevice.Release();
hr = spSyncServices->getDevice(i, &spTempDevice);
if(SUCCEEDED(hr) && spTempDevice.p)
{
spTempDevice->get_connected(&vbIsConnected);
if( (bConnectedOnly && vbIsConnected == VARIANT_TRUE) ||
!bConnectedOnly )
{
// Add the device to the custom array.
spTempDevice.CopyTo(&m_ppWMPDevices[cDeviceIndex++]);
}
}
}
}
return hr;
}
Vous pouvez utiliser du code similaire pour récupérer d’autres listes d’appareils de ce type. Par exemple, vous pouvez utiliser IWMPSyncDevice :: obtenir l' _ État pour créer un tableau d’appareils pour lequel un partenariat existe.