CMINVOKECOMMANDINFOEX 構造体 (shobjidl_core.h)

ショートカット メニュー コマンドに関する拡張情報が含まれます。 この構造体は、Unicode 値を使用できる CMINVOKECOMMANDINFO の拡張バージョンです。

構文

typedef struct _CMINVOKECOMMANDINFOEX {
  DWORD   cbSize;
  DWORD   fMask;
  HWND    hwnd;
  LPCSTR  lpVerb;
  LPCSTR  lpParameters;
  LPCSTR  lpDirectory;
  int     nShow;
  DWORD   dwHotKey;
  HANDLE  hIcon;
  LPCSTR  lpTitle;
  LPCWSTR lpVerbW;
  LPCWSTR lpParametersW;
  LPCWSTR lpDirectoryW;
  LPCWSTR lpTitleW;
  POINT   ptInvoke;
} CMINVOKECOMMANDINFOEX;

メンバー

cbSize

型: DWORD

この構造体のサイズ (バイト単位)。 このメンバーは、IContextMenu::InvokeCommand の呼び出し元によって入力され、構造体が CMINVOKECOMMANDINFO ではなく CMINVOKECOMMANDINFOEX 構造体であることを認識するために、実装によってテストされる必要があります。

fMask

型: DWORD

必要な動作を示し、構造体内の他のフィールドが使用されることを示すために、0 または 1 つ以上の次のフラグが設定されます。

CMIC_MASK_HOTKEY

dwHotKey メンバーは有効です。

CMIC_MASK_ICON

hIcon メンバーは有効です。 Windows Vista の時点では、このフラグは使用されません。

CMIC_MASK_FLAG_NO_UI

IContextMenu::InvokeCommand の実装では、コマンドの実行中にユーザー インターフェイス要素 (エラー メッセージなど) を表示できません。

CMIC_MASK_UNICODE

ショートカット メニュー ハンドラーでは、ANSI に相当するメンバーではなく、 lpVerbWlpParametersWlpDirectoryWlpTitleW の各メンバーを使用する必要があります。 一部のショートカット メニュー ハンドラーでは Unicode がサポートされない場合があるため、 lpVerblpParameterslpDirectorylpTitle の各メンバーに有効な ANSI 文字列も渡す必要があります。

CMIC_MASK_NO_CONSOLE

ショートカット メニュー ハンドラーで新しいプロセスを作成する必要がある場合、通常は新しいコンソールが作成されます。 CMIC_MASK_NO_CONSOLE フラグを設定すると、新しいコンソールが作成されなくなります。

CMIC_MASK_HASLINKNAME

lpTitle メンバーには、ショートカット ファイルへの完全なパスが含まれています。 CMIC_MASK_HASTITLEと組み合わせて使用します。

メモ この値は、Windows Vista 以降のシステムではサポートされていません。
 

CMIC_MASK_HASTITLE

lpTitle メンバーは有効です。

メモ この値は、Windows Vista 以降のシステムではサポートされていません。
 

CMIC_MASK_FLAG_SEP_VDM

このフラグは、16 ビット Windows ベースのアプリケーションを参照する場合にのみ有効です。 設定されている場合、ショートカットが指すアプリケーションはプライベート Virtual DOS マシン (VDM) で実行されます。 「解説」を参照してください。

CMIC_MASK_ASYNCOK

IContextMenu::InvokeCommand の実装では、呼び出しを処理するための新しいスレッドまたはプロセスをスピンオフでき、呼び出される関数の完了時にブロックする必要はありません。 たとえば、動詞が "delete" の場合、すべての項目が削除される前に IContextMenu::InvokeCommand 呼び出しが返されることがあります。 これはアドバイザリであるため、このフラグを指定するアプリケーションを呼び出しても、呼び出す動詞の実装に慣れていない場合、この要求が受け入れられます。

CMIC_MASK_NOASYNC

Windows Vista 以降。 IContextMenu::InvokeCommand の実装は同期する必要があり、完了する前に が返されません。 これは推奨されるため、このフラグを指定するアプリケーションを呼び出しても、呼び出す動詞の実装に慣れていない場合は、この要求が受け入れられます。

CMIC_MASK_SHIFT_DOWN

Shift キーが押されます。 動詞が呼び出されてから変更された可能性があるキーボードの現在の状態をポーリングする代わりに、これを使用します。

CMIC_MASK_CONTROL_DOWN

Ctrl キーが押されます。 動詞が呼び出されてから変更された可能性があるキーボードの現在の状態をポーリングする代わりに、これを使用します。

CMIC_MASK_FLAG_LOG_USAGE

IContextMenu::InvokeCommand の実装で、"最近使ったドキュメント" メニューなどの機能に対して呼び出される項目を追跡する必要がある可能性があることを示します。

CMIC_MASK_NOZONECHECKS

ゾーン チェックを実行しないでください。 このフラグを使用すると、 ShellExecuteEx はIAttachmentExecute によって配置されたゾーン チェックをバイパスできます。

CMIC_MASK_PTINVOKE

ptInvoke メンバーは有効です。

hwnd

型: HWND

ショートカット メニューの所有者であるウィンドウへのハンドル。 拡張機能では、表示されるメッセージ ボックスまたはダイアログ ボックスの所有者として、このハンドルを使用することもできます。 呼び出し元は、表示される可能性のある UI の所有者ウィンドウとして使用できる正当な HWND を指定する必要があります。 UI スレッド (Windows が既に作成されているスレッド) からを呼び出すときに HWND を指定しないと、 IContextMenu::InvokeCommand 呼び出しの実装で再入とバグが発生する可能性があります。

lpVerb

種類: LPCSTR

実行するコマンドの言語に依存しない名前を指定する null で終わる文字列のアドレス。通常、このメンバーは、アプリケーションによってコマンドがアクティブ化されている場合の文字列です。 システムは、次のコマンド文字列に対して定義済みの定数値を提供します。

常時 コマンド文字列
CMDSTR_RUNAS "RunAs"
CMDSTR_PRINT "印刷"
CMDSTR_PREVIEW "プレビュー"
CMDSTR_OPEN "開く"
 

これは固定セットではありません。新しい正規動詞はコンテキスト メニュー ハンドラーによって作成でき、アプリケーションで呼び出すことができます。

正規動詞が存在し、メニュー ハンドラーが正規動詞を実装していない場合は、エラー コードを返して、次のハンドラーがこの動詞を処理できるようにする必要があります。 これを行わないと、 ShellExecute を含むシステムの機能が中断されます。

または、ポインターではなく、このパラメーターを MAKEINTRESOURCE(offset) にすることもできます。 ここで、offset は実行するコマンドのメニュー識別子オフセットです。実装では、 IS_INTRESOURCE マクロを使用して、この代替手段が使用されていることを検出できます。 シェルは、ユーザーがメニュー コマンドを選択するときに、この代替手段を使用します。

lpParameters

種類: LPCSTR

省略可能なパラメーター。 シェル拡張機能によって挿入されたメニュー項目の場合、このメンバーは常に NULL です

lpDirectory

種類: LPCSTR

オプションの作業ディレクトリ名。 シェル拡張機能によって挿入されたメニュー項目の場合、このメンバーは常に NULL です

nShow

型: int

コマンドがウィンドウを表示するか、アプリケーションを起動した場合に ShowWindow 関数に渡すSW_値のセット。

dwHotKey

型: DWORD

コマンドによってアクティブ化されたすべてのアプリケーションに割り当てるオプションのキーボード ショートカット。 fMask メンバーがCMIC_MASK_HOTKEYを指定しない場合、このメンバーは無視されます。

hIcon

型: HANDLE

コマンドによってアクティブ化されたすべてのアプリケーションに使用するアイコン。 fMask メンバーがCMIC_MASK_ICONを指定しない場合、このメンバーは無視されます。

lpTitle

種類: LPCSTR

ASCII タイトル。

lpVerbW

種類: LPCWSTR

Unicode 動詞。使用できるコマンド用です。

lpParametersW

種類: LPCWSTR

使用できるコマンドの Unicode パラメーター。

lpDirectoryW

種類: LPCWSTR

Unicode ディレクトリ。それを使用できるコマンド用です。

lpTitleW

種類: LPCWSTR

Unicode タイトル。

ptInvoke

種類: POINT

コマンドが呼び出されるポイント。 fMask メンバーがCMIC_MASK_PTINVOKEを指定しない場合、このメンバーは無視されます。 このメンバーは、インターネット エクスプローラー 4.0 より前は無効です。

注釈

IContextMenu::InvokeCommand 宣言は pici パラメーターに CMINVOKECOMMANDINFO 構造体を指定しますが、CMINVOKECOMMANDINFOEX 構造体を受け入れることもできます。 このメソッドを実装する場合は、 cbSize を調べて、渡された構造体を確認する必要があります。

既定では、すべての 16 ビット Windows ベースのアプリケーションは、単一の共有 VDM でスレッドとして実行されます。 個別に実行する利点は、クラッシュによって単一の VDM のみが終了することです。個別の VDM で実行されている他のプログラムは、引き続き正常に機能します。 また、個別の VDM で実行される 16 ビットの Windows ベースのアプリケーションには、個別の入力キューがあります。 つまり、あるアプリケーションが一時的に応答を停止した場合、個別の VDM 内のアプリケーションは入力を受け取り続けます。 個別に実行する場合の欠点は、実行するためのメモリが大幅に多くなることです。

CMINVOKECOMMANDINFOEX 自体は Shobjidl.h で定義されていますが、すべてのフラグにフル アクセスするには Shellapi.h も含める必要があります。

メモ Windows Vista より前のバージョンでは、この構造体は Shlobj.h で宣言されていました。
 

要件

要件
サポートされている最小のクライアント Windows 2000 Professional、Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
Header shobjidl_core.h (Shobjidl.h を含む)