Win32 API 日本語リファレンス
ホームUI.Shell › IAppPublisher

IAppPublisher

COM
IID07250a10-9cf9-11d1-9076-006008059382継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

コントロールパネルの [プログラムの追加と削除] を通じてアプリケーションを公開するためのメソッドを公開します。これはこの目的のために実装される主要なインターフェイスです。

解説(Remarks)

コントロールパネルの [プログラムの追加と削除] は、登録された発行元オブジェクトを作成し、その IAppPublisher インターフェイスを要求します。IAppPublisher を使用して作成するアプリケーション列挙子を使うと、公開されたアプリケーションオブジェクトを作成できます。

[プログラムの追加と削除] は発行元から公開されたアプリケーションの一覧を収集し、次に発行元を使用してこれらのアプリケーションを Microsoft Active Directory とともに表示します。ユーザーが [プログラムの追加と削除][新しいプログラムの追加] をクリックすると、公開されたアプリケーションの一覧が表示されます。

次のコンポーネントオブジェクトモデル (COM) インターフェイスを使用して、[プログラムの追加と削除] にアプリケーションを公開できます。

これらのインターフェイスを実装する場合は、COM オブジェクトをレジストリに登録する必要があります。発行元を登録するには、次のレジストリキーの下にオブジェクトのクラス識別子 (CLSID) を追加します。
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               AppManagement
                  Publishers

たとえば、発行元の名前が "My Publisher" の場合、"Publishers" の下に "My Publisher" という名前の新しいキーを作成し、その既定の REG_SZ 値を発行元の CLSID とします。

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               AppManagement
                  Publishers
                     My Publisher
                        (Default) = {4D05CD3D-FFED-46bb-B9F1-321C26BE6362}

また、次のように一般的な COM サーバーの登録エントリを作成することもできます。

HKEY_CLASSES_ROOT
   CLSID
      {469EE8CE-1B86-4524-9042-AAA44FD9C8F2}
         (Default) = Sample Applications Publisher
         InProcServer32
            (Default) = pubdemo.dll
            ThreadingModel = Apartment

この方法で発行元を登録すると、[新しいプログラムの追加] ビューが表示される際に、[プログラムの追加と削除] はオブジェクトに対して CoCreateInstance を呼び出してオブジェクトのインスタンスを作成し、適切な IAppPublisher インターフェイスを要求します。IAppPublisher を使用して、[プログラムの追加と削除] はアプリケーション列挙子 (IEnumPublishedApps) と、公開されたアプリケーションを説明する情報を取得します。IPublishedApp の実装は、その IPublishedApp::Install メソッドで、関連付けられたアプリケーションのインストールを担当します。ユーザーがユーザーインターフェイスで [追加] または [後で追加] ボタンをクリックすると、[プログラムの追加と削除] はこのメソッドを呼び出します。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetNumberOfCategories(DWORD* pdwCat)

廃止されました。[プログラムの追加と削除] コントロールパネルアプリケーションのクライアントは E_NOTIMPL を返してかまいません。

pdwCatDWORD*outこのパラメーターは使用されません。

戻り値

このメソッドは値を返しません。

vtbl 4 HRESULT GetCategories(APPCATEGORYINFOLIST* pAppCategoryList)

アプリケーション発行元が提供するカテゴリを列挙した構造体を取得します。

pAppCategoryListAPPCATEGORYINFOLIST*outAPPCATEGORYINFOLIST 構造体へのポインター。この構造体の cCategory メンバーはサポートされるカテゴリの数を返します。pCategoryInfo メンバーは APPCATEGORYINFO 構造体の配列へのポインターを返します。この配列にはアプリケーション発行元がサポートするすべてのカテゴリが含まれ、CoTaskMemAlloc を使用して割り当て、CoTaskMemFree を使用して解放する必要があります。

戻り値

型: HRESULT

このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

[プログラムの追加と削除] コントロールパネルアプリケーションは、カテゴリに対して返された ID を IAppPublisher::EnumApps メソッドに渡して、どのカテゴリを列挙するかを識別します。

次の例は、IAppPublisher::GetCategories によって返される APPCATEGORYINFO 構造体の配列のサイズを計算する方法を示しています。

size_t CategoryListArraySize = sizeof(APPCATEGORYINFO) * pInfoList->cCategory;
vtbl 5 HRESULT GetNumberOfApps(DWORD* pdwApps)

廃止されました。[プログラムの追加と削除] コントロールパネルアプリケーションのクライアントは E_NOTIMPL を返してかまいません。

pdwAppsDWORD*outこのパラメーターは使用されません。

戻り値

このメソッドは値を返しません。

vtbl 6 HRESULT EnumApps(GUID* pAppCategoryId, IEnumPublishedApps** ppepa)

指定されたカテゴリについて、アプリケーション発行元が公開したすべてのアプリケーションを列挙するための列挙子を作成します。

pAppCategoryIdGUID*in列挙するアプリケーションカテゴリを指定する GUID へのポインター。これは IAppPublisher::GetCategories を通じて提供されるカテゴリのいずれかである必要があります。pAppCategoryIDIAppPublisher::GetCategories を通じて提供されていないカテゴリを識別する場合、列挙子の作成は成功しますが、列挙子は 0 個の項目を返します。このパラメーター値が NULL の場合、列挙子はすべてのカテゴリについて公開されたアプリケーションを返します。
ppepaIEnumPublishedApps**outIEnumPublishedApps インターフェイスを指す IEnumPublishedApps 参照変数へのポインターのアドレス。アプリケーション発行元は IEnumPublishedApps インターフェイスをサポートする列挙オブジェクトを作成し、そのポインター値をこのパラメーターを通じて返す必要があります。

戻り値

型: HRESULT

このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。

解説(Remarks)

IEnumPublishedApps は標準的な列挙インターフェイスではありません。Skip メソッドをサポートしておらず、その Next メソッドも複数項目の取得をサポートしていません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IAppPublisher "{07250A10-9CF9-11D1-9076-006008059382}"
#usecom global IAppPublisher IID_IAppPublisher "{}"
#comfunc global IAppPublisher_GetNumberOfCategories  3 var
#comfunc global IAppPublisher_GetCategories          4 var
#comfunc global IAppPublisher_GetNumberOfApps        5 var
#comfunc global IAppPublisher_EnumApps               6 var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。