IExplorerCommand
COM公式ドキュメント
コマンドの外観を取得したり、サブコマンドを列挙したり、コマンドを呼び出したりするメソッドを公開します。
解説(Remarks)
このインターフェイスのメソッドはいずれもネットワークリソースと通信すべきではありません。これらのメソッドは UI スレッド上で呼び出されるため、ネットワークリソースとの通信によって UI が応答しなくなる可能性があります。
Note: Windows 11 では、エクスプローラーの右クリック コンテキスト メニューおよび共有ダイアログにおけるファイル操作の動作が改良されています。Top 11 things you can do to make your app great on Windows 11 を参照してください。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定したエクスプローラーのコマンド項目を起動するボタンまたはメニュー項目のタイトル文字列を取得します。
| psiItemArray | IShellItemArray* | in | IShellItemArray へのポインター。 |
| ppszName | LPWSTR* | out | このメソッドが正常に返ったときにタイトル文字列を受け取るバッファーへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定したエクスプローラーのコマンド項目に関連付けられたアイコンの、アイコンリソース文字列を取得します。
| psiItemArray | IShellItemArray* | in | IShellItemArray へのポインター。 |
| ppszIcon | LPWSTR* | out | このメソッドが正常に返ったときに、アイコンのソースを識別するリソース文字列を受け取るバッファーへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
取得されるアイコンリソース文字列は標準形式であり、たとえば "shell32.dll,-249" のような形式です。
指定したエクスプローラーのコマンド項目に関連付けられたツールチップ文字列を取得します。
| psiItemArray | IShellItemArray* | in | IShellItemArray へのポインター。 |
| ppszInfotip | LPWSTR* | out | このメソッドが正常に返ったときにツールチップ文字列を受け取るバッファーへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
エクスプローラーのコマンドの GUID を取得します。
| pguidCommandName | GUID* | out | このメソッドが正常に返ったときに、コマンドがレジストリに登録されている際の GUID を受け取る値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは GUID を取得するにもかかわらず、いくぶん誤解を招く名前が付けられています。コマンドの正規名を取得するには、さらにコマンドのサブキーからそれを取り出す手順が必要です。GUID はそのサブキーの名前であり、その情報が格納されている場所です。
指定したエクスプローラーのコマンド項目に関連付けられた状態情報を取得します。
| psiItemArray | IShellItemArray* | in | IShellItemArray へのポインター。 |
| fOkToBeSlow | BOOL | in | verb オブジェクトが、UI スレッドを応答不能にする可能性のあるメモリを大量に消費する計算を実行すべきでない場合は FALSE。この場合、verb オブジェクトは E_PENDING を返します。TRUE の場合は、それらの計算を完了させることができます。 |
| pCmdState | DWORD* | out | このメソッドが正常に返ったときに、EXPCMDSTATE 定数で示される 1 つ以上のエクスプローラーのコマンド状態を受け取る値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
エクスプローラーのコマンドを呼び出します。
| psiItemArray | IShellItemArray* | in | IShellItemArray へのポインター。 |
| pbc | IBindCtx* | in | バインドコンテキストへのアクセスを提供する IBindCtx インターフェイスへのポインター。バインドコンテキストが不要な場合、この値は NULL にできます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
エクスプローラーのコマンドに関連付けられたフラグを取得します。
| pFlags | DWORD* | out | このメソッドが返ると、この値は現在のコマンドフラグを指します。次の値の 1 つ以上が設定されます。 ECF_DEFAULT (0x000)Windows 7 以降。コマンドフラグは設定されていません。 ECF_HASSUBCOMMANDS (0x001)コマンドにサブコマンドがあります。 ECF_HASSPLITBUTTON (0x002)分割ボタンが表示されます。 ECF_HIDELABEL (0x004)ラベルが非表示になります。 ECF_ISSEPARATOR (0x008)コマンドは区切り線です。 ECF_HASLUASHIELD (0x010)UAC シールドが表示されます。 ECF_SEPARATORBEFORE (0x020)Windows 7 で導入。コマンドはメニュー内で区切り線のすぐ下に配置されます。 ECF_SEPARATORAFTER (0x040)Windows 7 で導入。コマンドはメニュー内で区切り線のすぐ上に配置されます。 ECF_ISDROPDOWN (0x080)Windows 7 で導入。コマンドを選択するとドロップダウンのサブメニューが開きます (たとえば Include in library)。 ECF_TOGGLEABLE (0x100)Windows 8 で導入。 ECF_AUTOMENUICONS (0x200)Windows 8 で導入。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
コマンドのサブコマンドの列挙子を取得します。
| ppEnum | IEnumExplorerCommand** | out | このメソッドが正常に返ると、サブコマンドの集合を走査するために使用できる IEnumExplorerCommand インターフェイスポインターが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
サブコマンドは、コマンドがエクスプローラーウィンドウの上部に表示される際に、分割ボタンを介してメニューのドロップダウン項目として表示されます。その位置では、既定のコマンドボタンにのみアイコンが付きます。通常のメニューでは、すべてのコマンドのアイコンが表示されます。
それ自体がさらにサブコマンドを持つサブコマンドは、エクスプローラーではサポートされていません。コマンドが独自のサブコマンドを持つ場合は、IExplorerCommand::GetFlags の呼び出しで ECF_HASSUBCOMMANDS を指定して、その状態を明示する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IExplorerCommand "{A08CE4D0-FA25-44AB-B57C-C7B1C323E0B9}" #usecom global IExplorerCommand IID_IExplorerCommand "{}" #comfunc global IExplorerCommand_GetTitle 3 sptr,var #comfunc global IExplorerCommand_GetIcon 4 sptr,var #comfunc global IExplorerCommand_GetToolTip 5 sptr,var #comfunc global IExplorerCommand_GetCanonicalName 6 var #comfunc global IExplorerCommand_GetState 7 sptr,int,var #comfunc global IExplorerCommand_Invoke 8 sptr,sptr #comfunc global IExplorerCommand_GetFlags 9 var #comfunc global IExplorerCommand_EnumSubCommands 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IExplorerCommand "{A08CE4D0-FA25-44AB-B57C-C7B1C323E0B9}" #usecom global IExplorerCommand IID_IExplorerCommand "{}" #comfunc global IExplorerCommand_GetTitle 3 sptr,sptr #comfunc global IExplorerCommand_GetIcon 4 sptr,sptr #comfunc global IExplorerCommand_GetToolTip 5 sptr,sptr #comfunc global IExplorerCommand_GetCanonicalName 6 sptr #comfunc global IExplorerCommand_GetState 7 sptr,int,sptr #comfunc global IExplorerCommand_Invoke 8 sptr,sptr #comfunc global IExplorerCommand_GetFlags 9 sptr #comfunc global IExplorerCommand_EnumSubCommands 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。