枚举设备
[与此页面关联的功能(Windows 媒体播放器 SDK)是旧版功能。 它已被 MediaPlayer 取代。 MediaPlayer 已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用 MediaPlayer 而不是 Windows 媒体播放器 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
Windows 媒体播放器表示使用 IWMPSyncDevice 接口的可移植设备。 以下示例代码演示一个函数,该函数创建指向 IWMPSyncDevice 的指针数组。 数组中的每个指针都表示Windows 媒体播放器存储了信息的设备。 设备不需要连接到计算机,也不需要与当前Windows 媒体播放器实例建立合作关系。
每当收到 DeviceConnect 事件或 DeviceDisconnect 事件时,都应枚举设备。
以下函数枚举设备。 bConnectedOnly 参数指定是否仅枚举当前连接到用户计算机的设备。
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;
}
可以使用类似的代码来检索其他此类设备列表。 例如,可以使用 IWMPSyncDevice::get_status 来创建存在合作关系的设备数组。
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈