IShellLinkDataList
COM公式ドキュメント
アプリケーションがシェルリンクに追加のデータブロックを付加できるようにするメソッドを公開します。これらのメソッドは、データブロックの追加、コピー、または削除を行います。
解説(Remarks)
データブロックは構造体の形式になっています。最初の 2 つのメンバーはすべてのデータブロックで共通です。1 つ目のメンバーは構造体のサイズを示します。2 つ目のメンバーはデータブロックの種類を識別するシグネチャです。残りのメンバーはブロックのデータを保持します。現在サポートされているデータブロックには 5 種類あります。
| データブロック構造体 | 説明 |
|---|---|
| EXP_DARWIN_LINK | リンクの Windows Installer ID。 |
| EXP_SPECIAL_FOLDER | 特殊フォルダーの情報。 |
| EXP_SZ_LINK | ターゲット名。 |
| NT_CONSOLE_PROPS | コンソールのプロパティ。 |
| NT_FE_CONSOLE_PROPS | コンソールのコードページ。 |
このインターフェースはアプリケーションによって実装されません。
アプリケーションがシェルリンクに追加のデータブロックを付加する必要がある場合に、このインターフェースを使用します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
リンクにデータブロックを追加します。
| pDataBlock | void* | in | データブロック構造体。サポートされている構造体の一覧については、IShellLinkDataList を参照してください。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合は COM エラーコードを返します。
リンクのデータブロックのコピーを取得します。
| dwSig | DWORD | in | データブロックのシグネチャ。特定の種類のデータブロックのシグネチャ値は、その構造体のリファレンスに記載されています。サポートされているデータブロックの種類と、それに関連する構造体の一覧については、IShellLinkDataList を参照してください。 |
| ppDataBlock | void** | out | データブロック構造体のコピーへのポインターのアドレス。IShellLinkDataList::CopyDataBlock が成功を返した場合、呼び出し元のアプリケーションは、そのメモリが不要になった時点で LocalFree を呼び出して解放する必要があります。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合は COM エラーコードを返します。
リンクからデータブロックを削除します。
| dwSig | DWORD | in | データブロックのシグネチャ。特定の種類のデータブロックのシグネチャ値は、その構造体のリファレンスに記載されています。サポートされているデータブロックの種類と、それに関連する構造体の一覧については、IShellLinkDataList を参照してください。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合は COM エラーコードを返します。
現在のオプション設定を取得します。
| pdwFlags | DWORD* | out | 現在のオプション設定を示す 1 つ以上の SHELL_LINK_DATA_FLAGS へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
現在のオプション設定を設定します。
| dwFlags | DWORD | in | オプション設定を示す 1 つ以上の SHELL_LINK_DATA_FLAGS。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellLinkDataList "{45E2B4AE-B1C3-11D0-B92F-00A0C90312E1}" #usecom global IShellLinkDataList IID_IShellLinkDataList "{}" #comfunc global IShellLinkDataList_AddDataBlock 3 sptr #comfunc global IShellLinkDataList_CopyDataBlock 4 int,sptr #comfunc global IShellLinkDataList_RemoveDataBlock 5 int #comfunc global IShellLinkDataList_GetFlags 6 var #comfunc global IShellLinkDataList_SetFlags 7 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IShellLinkDataList "{45E2B4AE-B1C3-11D0-B92F-00A0C90312E1}" #usecom global IShellLinkDataList IID_IShellLinkDataList "{}" #comfunc global IShellLinkDataList_AddDataBlock 3 sptr #comfunc global IShellLinkDataList_CopyDataBlock 4 int,sptr #comfunc global IShellLinkDataList_RemoveDataBlock 5 int #comfunc global IShellLinkDataList_GetFlags 6 sptr #comfunc global IShellLinkDataList_SetFlags 7 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。