Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Previous | Next |
Enumerating Devices
Windows Media Player represents portable devices by using the IWMPSyncDevice interface. The following example code shows a function that creates an array of pointers to IWMPSyncDevice. Each pointer in the array represents a device for which Windows Media Player has stored information. A device is not required to be connected to the computer, nor is it required to have a partnership with the current Windows Media Player instance.
You should enumerate devices whenever you receive the DeviceConnect event or the DeviceDisconnect event.
The following function enumerates devices. The bConnectedOnly parameter specifies whether to enumerate only devices currently connected to the user's computer.
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; }
You might use similar code to retrieve other such device lists. For example, you could use IWMPSyncDevice::get_status to create an array of devices for which a partnership exists.
See Also
- IWMPEvents2::DeviceConnect
- IWMPEvents2::DeviceDisconnect
- IWMPSyncDevice Interface
- IWMPSyncDevice::get_connected
- IWMPSyncServices Interface
- Working with Portable Devices
Previous | Next |