プレイリストの同期状態の決定
[このページWindows メディア プレーヤー SDK に関連付けられている機能は、レガシ機能です。 MediaPlayer に置き換わりました。 MediaPlayer は、Windows 10とWindows 11用に最適化されています。 可能な場合は、新しいコードで SDK ではなく MediaPlayerWindows メディア プレーヤー使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
Windows メディア プレーヤー 10 以降では、SyncState 属性を使用して、特定のデジタル メディア ファイルがポータブル デバイスにコピーされているかどうか、および障害が発生した場合に、デバイスに十分なメモリがないためにコピーが失敗したかどうかに関する情報が格納されます。
次のコード例では、デジタル メディア ファイルからこの情報を取得する関数を作成します。 関数は、次のパラメーターを受け取ります。
- pMedia。 検査するデジタル メディア ファイルを表す IWMPMedia インターフェイスへのポインター。
- lPsIndex。 現在のデバイスのパートナーシップ インデックス。
- pulOnDevice。 デジタル メディア ファイルがデバイスにコピーされたかどうかを示す値を受け取る long 変数へのポインター。
- pulDidNotFit。 デバイスに十分なメモリがないためにコピー操作が失敗したかどうかを示す値を受け取る long 変数へのポインター。
SyncState 属性に含まれる情報は、ビット単位でエンコードされます。 この関数の使用方法については、「 メディアアイテムの列挙」のコード例を参照してください。
STDMETHODIMP CSyncSettings::GetPartnershipSyncState(IWMPMedia* pMedia, long lPsIndex, ULONG *pulOnDevice, ULONG *pulDidNotFit)
{
ATLASSERT(pMedia);
ATLASSERT(lPsIndex > 0 &&
lPsIndex < 17);
ATLASSERT(pulOnDevice);
ATLASSERT(pulDidNotFit);
CComVariant varSyncStateVal;
CComPtr<IWMPMedia> spMedia(pMedia);
CComPtr<IWMPMedia3> spMedia3;
HRESULT hr = spMedia.QueryInterface(&spMedia3);
ULONG ulSyncState = 0; // Stores the ulVal member of varSyncStateVal.
ULONG lLSB = 0; // Represents least significant bit: Did the media fail to copy because it would not fit?
ULONG lMSB = 0; // Represents most significant bit: Is the media on the device?
// Calculate the bit shift required to isolate the partnership bit
// pair from the SyncState attribute.
const int iRshift = (lPsIndex - 1) * 2;
if(SUCCEEDED(hr) && spMedia3)
{
hr = spMedia3->getItemInfoByType(CComBSTR("SyncState"), CComBSTR(""), 0, &varSyncStateVal);
}
if(SUCCEEDED(hr) && varSyncStateVal.vt == VT_UI4)
{
// Get the value.
ulSyncState = varSyncStateVal.ulVal;
// Shift the bit pair to the rightmost position.
ulSyncState >>= iRshift;
// Mask the rightmost bit pair.
ulSyncState &= 3;
// Get the LSB
lLSB = ulSyncState & ~2; // Sets the 2E1 bit to zero.
// Get the MSB
ulSyncState >>= 1;
lMSB = ulSyncState;
}
// Return the bits.
*pulOnDevice = lMSB;
*pulDidNotFit = lLSB;
return hr;
}
関連トピック
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示