IObjectWithAppUserModelID
COM公式ドキュメント
カスタム IAssocHandler オブジェクトの実装者が、その明示的な Application User Model ID (AppUserModelID) へのアクセスを提供できるようにするメソッドを公開します。
解説(Remarks)
アプリケーションが登録済みハンドラーとなっているファイルの種類のみが、そのアプリケーションのジャンプ リストに表示されます。アプリケーションが明示的な AppUserModelID を使用して、自身およびそれに属するウィンドウやプロセスを識別する場合、その AppUserModelID をハンドラーの実装内でも設定する必要があります。これにより、ハンドラーがそのアプリケーションに関連付けられていると認識されます。アプリケーションがファイルにアクセスし、その結果として SHAddToRecentDocs が呼び出されると、そのアプリケーションのジャンプ リストにある 最近使ったもの カテゴリや 頻繁に使うもの カテゴリ、あるいはカスタム カテゴリにそのファイルを追加しようと試みられます。ハンドラーの AppUserModelID がアプリケーションの AppUserModelID と一致することでそのファイルの種類の登録済みハンドラーとして識別される場合、そのファイルはジャンプ リストに追加されます。一致しない場合はフィルターされ、表示されません。
実装するタイミング
このインターフェイスの実装は Windows に用意されています。アプリケーションのジャンプ リストに表示を許可するファイルをシステムが判別するために必要な、関連付けハンドラーの列挙を公開するカスタム シェル フォルダーを作成するアプリケーションは、独自のバージョンを実装する必要があります。使用するタイミング
このオブジェクトは、アプリケーションが明示的な AppUserModelID を使用している場合にのみ必要です。公開すべき明示的な AppUserModelID がない場合、このオブジェクトは不要です。IObjectWithAppUserModelID は常に、明示的な AppUserModelID を使用し、その情報をシステムに公開しようとする、より大きなオブジェクトの一部として使用されます。
システムは、アプリケーションがあるファイルの種類の登録済みハンドラーであるかどうかを判別するために、ハンドラー上に実装された IObjectWithAppUserModelID::GetAppID メソッドを呼び出します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
オブジェクトを特定のファイルの種類のハンドラーとして識別する、アプリケーション定義の一意な Application User Model ID (AppUserModelID) を指定します。このメソッドは、動的な AppUserModelID を必要とするアプリケーションで使用されます。
| pszAppID | LPWSTR | in | アプリケーションに割り当てる AppUserModelID 文字列へのポインター。 |
戻り値
型: HRESULT
動的な AppUserModelID を必要としないカスタム実装は E_NOTIMPL を返すことができます。動的な AppUserModelID を必要とするカスタム実装は、成功した場合は S_OK を、それ以外の場合はエラー値を返す必要があります。
ファイルの種類のハンドラーの明示的な Application User Model ID (AppUserModelID) が宣言されている場合、それを取得します。
| ppszAppID | LPWSTR* | out | このメソッドが返るとき、オブジェクトに割り当てられた AppUserModelID 文字列のアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
このメソッドは、ハンドラーに対して明示的に設定された AppUserModelID のみを取得できます。ハンドラーが明示的な AppUserModelID を登録せず、システムによって割り当てられた AppUserModelID に依存している場合、このメソッドはその AppUserModelID を取得しません。詳細については、Application User Model ID (AppUserModelID) を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IObjectWithAppUserModelID "{36DB0196-9665-46D1-9BA7-D3709EECF9ED}" #usecom global IObjectWithAppUserModelID IID_IObjectWithAppUserModelID "{}" #comfunc global IObjectWithAppUserModelID_SetAppID 3 wstr #comfunc global IObjectWithAppUserModelID_GetAppID 4 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IObjectWithAppUserModelID "{36DB0196-9665-46D1-9BA7-D3709EECF9ED}" #usecom global IObjectWithAppUserModelID IID_IObjectWithAppUserModelID "{}" #comfunc global IObjectWithAppUserModelID_SetAppID 3 wstr #comfunc global IObjectWithAppUserModelID_GetAppID 4 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。