IShellApp
COM公式ドキュメント
アプリケーションに関する一般的な情報を「プログラムの追加と削除」アプリケーションに提供するメソッドを公開します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アプリケーションに関する一般的な情報を取得します。
| pai | APPINFODATA* | inout | アプリケーション情報を返す APPINFODATA 構造体へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
実装では、cbSize を APPINFODATA のサイズと比較して検証する必要があります。cbSize が APPINFODATA のサイズと一致しない場合、このメソッドは E_FAIL のような COM エラー値を返す必要があります。
コントロールパネルの「プログラムの追加と削除」は、APPINFODATA 構造体の dwMask メンバーを設定し、AIM_DISPLAYNAME と AIM_SUPPORTURL を返すべきであることを示します。APPINFODATA で返す各値について、dwMask の対応するビットを設定する必要があります。その他のビットはすべてクリアする必要があります。
例
以下は dwMask ビットの使用方法のサンプルです。
HRESULT CPubApp::GetAppInfo(APPINFODATA *pData)
{
if (sizeof(APPINFODATA) != pData->cbSize)
return E_FAIL;
// First save off the mask of requested data items.
const DWORD dwMask = pData->dwMask;
// Zero-out the mask. Bits will be set as items are obtained.
pData->dwMask = 0;
// Call an internal function that obtains data and sets
// bits in pData->dwMask for each item obtained.
return get_app_info_data(pData, dwMask);
}
アプリケーションに対して許可される管理アクションのビットマスクを取得します。
| pdwActions | DWORD* | out | サポートされているアクションのビットマスクを返す DWORD 型の変数へのポインター。ビットフラグは APPACTIONFLAGS で説明されています。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
APPACTIONFLAGS のビットマスクのうち、「プログラムの追加と削除」が認識するのは APPACTION_INSTALL と APPACTION_ADDLATER のみです。
低速なソースを起源とする情報をアプリケーションに返します。このメソッドは公開されたアプリケーションには適用されません。
| psaid | SLOWAPPINFO* | out | アプリケーション情報を返す SLOWAPPINFO 構造体へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
IPublishedApp の実装は E_NOTIMPL を返す必要があります。このメソッドは、インストール済みアプリケーションに対して「プログラムの追加と削除」が内部的に使用します。
低速なソースを起源とする情報をアプリケーションに返します。IShellApp::GetSlowAppInfo とは異なり、このメソッドはキャッシュされた情報を返すことができます。このメソッドは公開されたアプリケーションには適用されません。
| psaid | SLOWAPPINFO* | out | アプリケーション情報を返す SLOWAPPINFO 構造体へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
IPublishedApp の実装は E_NOTIMPL を返します。このメソッドは、インストール済みアプリケーションに対して「プログラムの追加と削除」が内部的に使用します。
指定されたアプリケーションが現在インストールされているかどうかを示す値を取得します。
戻り値
型: HRESULT
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| アプリケーションがインストールされています。 | |
| アプリケーションはインストールされていません。 |
解説(Remarks)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellApp "{A3E14960-935F-11D1-B8B8-006008059382}" #usecom global IShellApp IID_IShellApp "{}" #comfunc global IShellApp_GetAppInfo 3 var #comfunc global IShellApp_GetPossibleActions 4 var #comfunc global IShellApp_GetSlowAppInfo 5 var #comfunc global IShellApp_GetCachedSlowAppInfo 6 var #comfunc global IShellApp_IsInstalled 7 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IShellApp "{A3E14960-935F-11D1-B8B8-006008059382}" #usecom global IShellApp IID_IShellApp "{}" #comfunc global IShellApp_GetAppInfo 3 sptr #comfunc global IShellApp_GetPossibleActions 4 sptr #comfunc global IShellApp_GetSlowAppInfo 5 sptr #comfunc global IShellApp_GetCachedSlowAppInfo 6 sptr #comfunc global IShellApp_IsInstalled 7 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。