1

Windows 8 アプリを開くにはIApplicationActivationManager::ActivateForProtocolを呼び出す必要があるため、IShellItemArray*データを提供する必要があります。

基本的には、新しい を作成したいだけなので、 SHCreateShellItemArrayFromIDListsIShellItemArrayを呼び出してみます。

しかし、2 番目のパラメーターがどの型であるかはよくわかりませんMSDN は次のように述べています。

rgpidl [in]
  タイプ: PCIDLIST_ABSOLUTE_ARRAY
    ITEMIDLIST 構造体への cidl 定数ポインターのリスト。

このタイプに関する情報はどこにもありません。MSDN にも、お気に入りの検索エンジンにもありません。

誰かがこの型とその作成/初期化を明確にするか、サンプルコードを提供していただければ幸いです。

4

1 に答える 1

2

この型PCIDLIST_ABSOLUTE_ARRAYは と同等ですLPCITEMIDLIST *。つまり、ITEMIDLIST (別名 PIDL) への定数ポインタの配列です。typedef の 'ABSOLUTE' 部分は、PIDL が子 PIDL (一部のフォルダーに関連する) ではなく、絶対 (つまり、デスクトップから始まる完全修飾 PIDL) でなければならないことを示します。

配列を作成するのと同じ方法で作成できます。

PCIDLIST_ABSOLUTE pIdlArray[10];
pIdlArray[0] = myFirstPidl;
pIdlArray[1] = mySecondPidl;
...

typedef が異なる理由はSTRICT_TYPED_ITEMIDS定義です。このシンボルが定義されている場合、シェル API ヘッダーは「型指定された」PIDL ポインターを使用するように切り替わります。これにより、絶対 PIDL、子 PIDL、const PIDL などを使用する場合に、より明確になります。STRICT_TYPED_ITEMIDSが定義されていない場合、 LPITEMIDLIST とそのバリアントはどこでも使用できます。

于 2013-02-21T22:53:48.897 に答える