ISyncMgrSyncItemInfo
COM公式ドキュメント
単一の同期項目に関するプロパティおよび状態情報を提供するメソッドを公開します。
解説(Remarks)
これらのプロパティをインターフェイスとして表現することで、ハンドラーを再コンパイルすることなく、後からプロパティのセットを変更できます。また、このインターフェイスはプロパティへの型安全なアクセスを提供します。
項目は常にこのインターフェイスを実装すべきであり、通常は ISyncMgrSyncItem を実装しているのと同じオブジェクト上に実装します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
項目の種類を表すラベルを取得します。これは通常、デバイスのモデル名、または同等の項目固有の識別文字列を提供します。
| ppszTypeLabel | LPWSTR* | out | このメソッドが返るとき、ラベル文字列を含むバッファーへのポインターが格納されます。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合はエラー値を返します。メソッドが失敗した場合、ppszTypeLabel には空の文字列が格納されます。
解説(Remarks)
ラベル値は、フォルダー UI において System.Sync.ItemTypeLabel (PKEY_Sync_ItemTypeLabel) プロパティとして表示されます。Sync Center は、UpdateHandler メソッドまたは UpdateItem メソッドが呼び出されるたびに、このメソッドを呼び出します。
ppszTypeLabel が指す文字列バッファーの割り当ては、CoTaskMemAlloc を通じて項目が行う責任があります。Sync Center は、CoTaskMemFree を通じてこの文字列バッファーを解放します。
項目に関する注釈を含む文字列を取得します。
| ppszComment | LPWSTR* | out | このメソッドが返るとき、コメント文字列を含むバッファーへのポインターが格納されます。この文字列は、終端の null 文字を含めて最大 MAX_SYNCMGR_NAME の長さです。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合はエラー値を返します。メソッドが失敗した場合、ppszComment には空の文字列が格納されます。
解説(Remarks)
この文字列は、項目がその内容の要約を表示するために提供できます。たとえば、"32 件の連絡先" や "13 曲" などです。この文字列は、終端の null 文字を含めて最大 MAX_SYNCMGR_NAME の長さを持つことができます。
コメント値は、同期が実行されていないときに、フォルダー UI において System.Sync.Comments (PKEY_Sync_Comments) プロパティとして表示されます。
Sync Center は、UpdateHandler メソッドが呼び出されるたびに、このメソッドを呼び出します。
ppszComment が指す文字列バッファーの割り当ては、CoTaskMemAlloc を通じて項目が行う責任があります。Sync Center は、CoTaskMemFree を通じてこの文字列バッファーを解放します。
項目が最後に同期された日時を取得します。
| pftLastSync | FILETIME* | out | このメソッドが返るとき、日時情報を含む FILETIME 構造体へのポインターが格納されます。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合はエラー値を返します。メソッドが失敗した場合、pftLastSync は前回の同期時の値を指します。
解説(Remarks)
この値は既定ではフォルダー UI に表示されませんが、System.Sync.DateSynchronized (PKEY_Sync_DateSynchronized) プロパティとして利用できます。
Sync Center は、UpdateItem メソッドが呼び出されるたびに、このメソッドを呼び出します。
例
次の例は、時刻と日付を取得するためにプライベートなクラス関数を呼び出す、このメソッドの実装を示しています。
STDMETHODIMP CMyDeviceSyncItem::GetLastSyncTime(__out FILETIME *pftLastSync)
{
*pftLastSync = _ftLastSync;
return S_OK;
}
項目が有効になっているかどうかを示す値を生成します。
戻り値
型: HRESULT
項目が有効な場合は S_OK を、それ以外の場合は S_FALSE を返します。
項目が Sync Center に現在の状態を維持させたい場合は、E_NOTIMPL を返すことができます。それ以外の値が返された場合、Sync Center は項目の有効状態を最後に判明していた値に設定し、関連するタスクを適切に有効化または無効化します。
GetCapabilities から返されるマスクに SYNCMGR_ICM_QUERY_BEFORE_ENABLE フラグまたは SYNCMGR_ICM_QUERY_BEFORE_DISABLE フラグのいずれかが設定されている場合、ハンドラーは自身の有効状態を管理する必要があるため、S_OK または S_FALSE のいずれかを返さなければなりません。それ以外の戻り値はエラーと見なされます。
解説(Remarks)
項目が無効になっている場合、その項目は Sync Center によって同期されません。また、同期などの、項目に対して利用可能な多くのアクションが UI から削除または無効化されます。
項目は、IsEnabled から S_FALSE を返し、かつ GetPolicies の実装で SYNCMR_IPM_PREVENT_ENABLE フラグを設定することで、Disconnected(切断)状態を実装できます。これにより、項目は無効として表示され、ユーザーが手動で有効化することを防ぎます。
有効状態の値は、フォルダー UI において System.Sync.Enabled (PKEY_Sync_Enabled) プロパティとして利用できます。
Sync Center は、UpdateHandler メソッドが呼び出されるたびに、このメソッドを呼び出します。
例
次の例は、有効状態を取得するためにプライベートなクラス関数を呼び出す、このメソッドの実装を示しています。
STDMETHODIMP CMyDeviceSyncItem::IsEnabled()
{
// Return a previously-calculated value.
return (_fIsEnabled ? S_OK : S_FALSE);
}
項目 — 通常は何らかの種類の外部デバイス — が接続されているかどうかを示す値を生成します。
戻り値
解説(Remarks)
項目が切断されている場合、その項目は Sync Center によって同期されません。また、同期などの、項目に対して利用可能な多くのアクションが UI から削除または無効化されます。
この値は、フォルダー UI において System.Sync.Connected (PKEY_Sync_Connected) プロパティとして利用できます。
Sync Center は、UpdateHandler メソッドが呼び出されるたびに、このメソッドを呼び出します。
例
次の例は、接続状態を取得するためにプライベートなクラス関数を呼び出す、このメソッドの実装を示しています。
STDMETHODIMP CMyDeviceSyncItem::IsConnected()
{
return (_IsConnected() ? S_OK : S_FALSE);
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISyncMgrSyncItemInfo "{E7FD9502-BE0C-4464-90A1-2B5277031232}" #usecom global ISyncMgrSyncItemInfo IID_ISyncMgrSyncItemInfo "{}" #comfunc global ISyncMgrSyncItemInfo_GetTypeLabel 3 var #comfunc global ISyncMgrSyncItemInfo_GetComment 4 var #comfunc global ISyncMgrSyncItemInfo_GetLastSyncTime 5 var #comfunc global ISyncMgrSyncItemInfo_IsEnabled 6 #comfunc global ISyncMgrSyncItemInfo_IsConnected 7 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_ISyncMgrSyncItemInfo "{E7FD9502-BE0C-4464-90A1-2B5277031232}" #usecom global ISyncMgrSyncItemInfo IID_ISyncMgrSyncItemInfo "{}" #comfunc global ISyncMgrSyncItemInfo_GetTypeLabel 3 sptr #comfunc global ISyncMgrSyncItemInfo_GetComment 4 sptr #comfunc global ISyncMgrSyncItemInfo_GetLastSyncTime 5 sptr #comfunc global ISyncMgrSyncItemInfo_IsEnabled 6 #comfunc global ISyncMgrSyncItemInfo_IsConnected 7 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。