擷取裝置屬性
[與此頁面相關聯的功能Windows 媒體播放機 SDK是舊版功能。 MediaPlayer已取代它。 MediaPlayer已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用MediaPlayer,而不是Windows 媒體播放機 SDK。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
Windows 媒體播放機儲存已連線到播放機之裝置的相關資訊。 某些屬性可藉由呼叫 IWMPSyncDevice的個別方法取得,有些屬性可以使用 IWMPSyncDevice::getItemInfo來擷取,而有些則可以使用任一技術來擷取。
下列範例程式碼會以指定裝置的可用屬性填入清單方塊控制項。 函式的第一個部分會擷取使用特定方法可用的屬性。 函式的第二個部分會使用 IWMPSyncDevice::getItemInfo來擷取屬性值。 函式參數 lIndex是m_ppWMPDevices所指向之自訂裝置陣列中裝置的索引。
STDMETHODIMP CMainDlg::ShowDeviceAttributes(long lIndex)
{
HRESULT hr = S_OK;
if(!m_ppWMPDevices)
return S_FALSE;
// Array of attribute names for devices.
const TCHAR *szDeviceAttributeNames[16] = {
_T("Connected"),
_T("FreeSpace"),
_T("FriendlyName"),
_T("LastSyncErrorCount"),
_T("LastSyncNoFitCount"),
_T("LastSyncTime"),
_T("Name"),
_T("SerialNumber"),
_T("SupportsAudio"),
_T("SupportsPhoto"),
_T("SupportsVideo"),
_T("SyncIndex"),
_T("SyncItemCount"),
_T("SyncPercentComplete"),
_T("SyncRelationship"),
_T("TotalSpace")};
// Array of device status strings.
static const TCHAR *szDeviceStatus[6] = {
_T("Unknown"),
_T("Partnership exists"),
_T("Partnership declined by the user"),
_T("Partnership with another computer or user"),
_T("Device only supports manual transfer"),
_T("New device")};
// Handle to the list box that displays the information.
HWND hwndStats = GetDlgItem(IDC_STATS);
CComBSTR bstrStatistics; // Contains the display string for each property.
CComBSTR bstrTemp; // Contains the retrieved value for each property.
// Retrieve a pointer to the current device.
CComPtr<IWMPSyncDevice> spDevice(m_ppWMPDevices[GetSelectedDeviceIndex()]);
VARIANT_BOOL vbIsConnected = VARIANT_FALSE;
WMPDeviceStatus wmpDS = wmpdsUnknown;
SendMessage(hwndStats, LB_RESETCONTENT, 0, 0);
if(NULL == spDevice.p)
{
return E_POINTER;
}
// Status
spDevice->get_status(&wmpDS);
bstrStatistics = "Status: ";
bstrTemp = szDeviceStatus[wmpDS];
bstrStatistics += bstrTemp;
SendMessage(hwndStats, LB_ADDSTRING, 0,(LPARAM)(LPCTSTR)COLE2T(bstrStatistics));
bstrTemp.Empty();
// Connected?
spDevice->get_connected(&vbIsConnected);
bstrStatistics = "Connected: ";
bstrTemp = (vbIsConnected == VARIANT_TRUE)?"True":"False";
bstrStatistics += bstrTemp;
SendMessage(hwndStats, LB_ADDSTRING, 0,(LPARAM)(LPCTSTR)COLE2T(bstrStatistics));
bstrTemp.Empty();
// Device ID
spDevice->get_deviceId(&bstrTemp);
bstrStatistics = "Device ID: ";
bstrStatistics += bstrTemp;
// Calculate the list box width based on text metrics.
// This assumes Device ID is likely to be the longest string.
HDC hDC = GetDC();
SIZE sizeText = {0, 0};
GetTextExtentPoint32(hDC, (LPCTSTR)COLE2T(bstrStatistics), bstrStatistics.Length(), &sizeText);
ReleaseDC(hDC);
SendMessage(hwndStats, LB_ADDSTRING, 0,(LPARAM)(LPCTSTR)COLE2T(bstrStatistics));
SendMessage(hwndStats, LB_SETHORIZONTALEXTENT, sizeText.cx, 0);
bstrTemp.Empty();
// Friendly name
spDevice->get_friendlyName(&bstrTemp);
bstrStatistics = "Friendly name: ";
bstrStatistics += bstrTemp;
SendMessage(hwndStats, LB_ADDSTRING, 0,(LPARAM)(LPCTSTR)COLE2T(bstrStatistics));
bstrTemp.Empty();
// Skip a line and label the getItemInfo attributes.
bstrStatistics = "";
SendMessage(hwndStats, LB_ADDSTRING, 0,(LPARAM)(LPCTSTR)COLE2T(bstrStatistics));
bstrStatistics = "--getItemInfo Attributes--";
SendMessage(hwndStats, LB_ADDSTRING, 0,(LPARAM)(LPCTSTR)COLE2T(bstrStatistics));
// Show the getItemInfo attributes.
int iArrayBound = sizeof szDeviceAttributeNames / sizeof szDeviceAttributeNames[0];
for(int i = 0; i < iArrayBound; i++)
{
CComBSTR bstrName(szDeviceAttributeNames[i]);
CComBSTR bstrVal;
CComBSTR bstrDisplayString;
hr = spDevice->getItemInfo(bstrName, &bstrVal);
if(FAILED(hr))
{
bstrVal.Append("Error");
}
bstrName.Append(L": ");
bstrDisplayString.AppendBSTR(bstrName);
bstrDisplayString += bstrVal;
SendMessage(hwndStats, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR)COLE2T(bstrDisplayString));
}
return hr;
}
相關主題
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應