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

IStartMenuPinnedList

COM
IID4cd19ada-25a5-4a32-b3b7-347bee5be36b継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

アプリケーションのショートカットをスタートメニューまたはタスクバーからピン留め解除するメソッドを公開します。

解説(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。

vtbl 3 HRESULT RemoveFromList(IShellItem* pitem)

Windows Vista: スタートメニューのピン留めリスト(スタートメニューの左上に表示されるリスト)から項目を削除します。

pitemIShellItem*inピン留めを解除する項目を表す IShellItem オブジェクトへのポインター。

戻り値

型: HRESULT

解説(Remarks)

アプリケーションは、インストールしたショートカットのいずれかがピン留めされているかどうかを知ることができないため、システムから削除するすべてのアプリケーションショートカットに対してこのメソッドを呼び出す必要があります。これには、インストール時にデスクトップに配置されたショートカットや、スタートメニューのすべてのプログラム一覧に追加されたショートカットが含まれます。

すべてのアプリケーションが、アンインストール処理の際にこのメソッドを使用してピン留め項目をクリーンアップすることを推奨します。アプリケーションショートカットのピン留め解除は必須ではありませんが、信頼性のために強く推奨されます。

このメソッドは、pitem が表す元のショートカットを削除するわけではありません。スタートメニューおよび/またはタスクバーにあるそのピン留め表現を削除します。このメソッドによって項目が削除(ピン留め解除)された後は、アプリケーションは元のショートカットを削除できます。

項目がスタートメニューとタスクバーの両方にピン留めされている場合、このメソッドを一度呼び出すだけで両方の場所から削除されます。

アプリケーションが Windows インストーラー (MSI) フレームワークを使用してアンインストールを実行している場合、このメソッドを明示的に呼び出す必要はありません。MSI が代わりにショートカットのピン留め解除の呼び出しを行います。

この例は、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 の 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_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 指定が可能。