IStartMenuPinnedList
COM公式ドキュメント
アプリケーションのショートカットをスタートメニューまたはタスクバーからピン留め解除するメソッドを公開します。
解説(Remarks)
実装するタイミング
Windows はこのインターフェイスの実装を CLSID_StartMenuPin として提供します。サードパーティが独自の実装を提供することはありません。使用するタイミング
アプリケーションがインストールしたショートカットは、その後ユーザーによってピン留めされている可能性があり、アプリケーションがそれを知る方法はありません。そのため、アンインストール時には、インストールした各ショートカットに対して IStartMenuPinnedList::RemoveFromList を呼び出すことを推奨します。IStartMenuPinnedList はショートカット自体を削除するのではなく、ピン留めを解除するだけである点に注意してください。アプリケーションは、まずショートカットに対して IStartMenuPinnedList::RemoveFromList を呼び出し、その後そのショートカットを削除します。
互換性
Windows 8 では、スタート画面が従来のスタートメニューに置き換わります。CLSID_StartMenuPin と IStartMenuPinnedList は、既存のアプリケーションとの後方互換性を提供するために Windows 8 にも存在しますが、Windows 8 のスタート画面にピン留めされたタイルには影響しません。CLSID_StartMenuPin と IStartMenuPinnedList は、Windows 8 のデスクトップタスクバーにピン留めされた項目には引き続き影響します。メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Windows Vista: スタートメニューのピン留めリスト(スタートメニューの左上に表示されるリスト)から項目を削除します。
| pitem | IShellItem* | in | ピン留めを解除する項目を表す IShellItem オブジェクトへのポインター。 |
戻り値
型: HRESULT
解説(Remarks)
アプリケーションは、インストールしたショートカットのいずれかがピン留めされているかどうかを知ることができないため、システムから削除するすべてのアプリケーションショートカットに対してこのメソッドを呼び出す必要があります。これには、インストール時にデスクトップに配置されたショートカットや、スタートメニューのすべてのプログラム一覧に追加されたショートカットが含まれます。
すべてのアプリケーションが、アンインストール処理の際にこのメソッドを使用してピン留め項目をクリーンアップすることを推奨します。アプリケーションショートカットのピン留め解除は必須ではありませんが、信頼性のために強く推奨されます。
このメソッドは、pitem が表す元のショートカットを削除するわけではありません。スタートメニューおよび/またはタスクバーにあるそのピン留め表現を削除します。このメソッドによって項目が削除(ピン留め解除)された後は、アプリケーションは元のショートカットを削除できます。
項目がスタートメニューとタスクバーの両方にピン留めされている場合、このメソッドを一度呼び出すだけで両方の場所から削除されます。
例
この例は、IStartMenuPinnedList::RemoveFromList の使用方法を示しています。
HRESULT hr = CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
if (SUCCEEDED(hr))
{
IShellItem *pitem;
hr = SHCreateItemFromParsingName(TEXT("Path to the shortcut"),
NULL,
IID_PPV_ARGS(&pitem));
//
// Do setup work here to remove the link, including the unpinning
// of the item.
//
if (SUCCEEDED(hr))
{
IStartMenuPinnedList *pStartMenuPinnedList;
hr = CoCreateInstance(CLSID_StartMenuPin,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pStartMenuPinnedList));
if (SUCCEEDED(hr))
{
hr = pStartMenuPinnedList->RemoveFromList(pitem);
pStartMenuPinnedList->Release();
}
pitem->Release();
}
}
CoUnitialize();
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IStartMenuPinnedList "{4CD19ADA-25A5-4A32-B3B7-347BEE5BE36B}"
#usecom global IStartMenuPinnedList IID_IStartMenuPinnedList "{}"
#comfunc global IStartMenuPinnedList_RemoveFromList 3 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。