SHELLEXECUTEINFOA 構造体 (shellapi.h)

ShellExecuteExで使用される情報を格納します。

構文

typedef struct _SHELLEXECUTEINFOA {
  DWORD     cbSize;
  ULONG     fMask;
  HWND      hwnd;
  LPCSTR    lpVerb;
  LPCSTR    lpFile;
  LPCSTR    lpParameters;
  LPCSTR    lpDirectory;
  int       nShow;
  HINSTANCE hInstApp;
  void      *lpIDList;
  LPCSTR    lpClass;
  HKEY      hkeyClass;
  DWORD     dwHotKey;
  union {
    HANDLE hIcon;
    HANDLE hMonitor;
  } DUMMYUNIONNAME;
  HANDLE    hProcess;
} SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA;

メンバーズ

cbSize

型: DWORD

必須。 この構造体のサイズ (バイト単位)。

fMask

型: ULONG

他の構造体メンバーの内容と有効性を示す、次の値の 1 つ以上の組み合わせ。

SEE_MASK_DEFAULT (0x00000000) 既定値を使用します。
SEE_MASK_CLASSNAME (0x00000001) lpClass メンバーによって指定されたクラス名を使用します。 SEE_MASK_CLASSKEYとSEE_MASK_CLASSNAMEの両方が設定されている場合は、クラス キーが使用されます。
SEE_MASK_CLASSKEY (0x00000003) hkeyClass メンバーによって指定されたクラス キーを使用します。 SEE_MASK_CLASSKEYとSEE_MASK_CLASSNAMEの両方が設定されている場合は、クラス キーが使用されます。
SEE_MASK_IDLIST (0x00000004) lpIDList メンバーによって指定された項目識別子リストを使用します。 lpIDList メンバーは、ITEMIDLIST 構造体を指す必要があります。
SEE_MASK_INVOKEIDLIST (0x0000000C) 選択した項目の ショートカット メニュー ハンドラーの IContextMenu インターフェイス使用します。 lpFile を使用してファイル システム パスで項目を識別するか、lpIDList を して項目を PIDL で識別します。 このフラグを使用すると、アプリケーション ShellExecuteEx を使用して、レジストリに一覧表示されている静的動詞ではなく、ショートカット メニュー拡張機能から動詞を呼び出すことができます。
注: SEE_MASK_INVOKEIDLIST はオーバーライドされ、SEE_MASK_IDLISTを意味します。
SEE_MASK_ICON (0x00000010) hIcon メンバーによって指定されたアイコンを使用します。 このフラグをSEE_MASK_HMONITORと組み合わせることはできません。
注: このフラグは、Windows XP 以前でのみ使用されます。 Windows Vista の時点では無視されます。
SEE_MASK_HOTKEY (0x00000020) dwHotKey メンバーによって提供されるキーボード ショートカットを使用します。
SEE_MASK_NOCLOSEPROCESS (0x00000040) hProcess メンバーがプロセス ハンドルを受け取っていることを示すために使用します。 通常、このハンドルは、ShellExecuteEx で作成されたプロセスがいつ終了するかをアプリケーションが確認できるようにするために使用されます。 DDE 会話を通じて実行が満たされた場合など、ハンドルが返されない場合があります。 呼び出し元のアプリケーションは、不要になったときにハンドルを閉じる役割を担います。
SEE_MASK_CONNECTNETDRV (0x00000080) 共有を検証し、ドライブ文字に接続します。 これにより、切断されたネットワーク ドライブの再接続が可能になります。 lpFile メンバーは、ネットワーク上のファイルの UNC パスです。
SEE_MASK_NOASYNC (0x00000100) 実行操作が完了するまで待ってから、戻ります。 このフラグは、非同期アクティブ化 (DDE など) になる可能性がある ShellExecute フォームを使用している呼び出し元が使用し、バックグラウンド スレッドで実行される可能性のあるプロセスを作成する必要があります。 (注: ShellExecuteEx は、呼び出し元のスレッド モデルが Apartment でない場合、既定でバックグラウンド スレッドで実行されます)。バックグラウンド スレッドで既に実行されているプロセスから ShellExecuteEx を する呼び出しは、常にこのフラグを渡す必要があります。 また、ShellExecuteEx を呼び出した直後に終了するアプリケーションでは、このフラグを指定する必要があります。

実行操作がバックグラウンド スレッドで実行され、呼び出し元が SEE_MASK_ASYNCOK フラグを指定しなかった場合、呼び出し元のスレッドは、新しいプロセスが開始されるまで待機してから戻ります。 これは通常、CreateProcess が呼び出された 、DDE 通信が完了したこと、またはカスタム実行デリゲートが ShellExecuteEx 通知したことを意味します。 SEE_MASK_WAITFORINPUTIDLE フラグが指定されている場合、ShellExecuteEx は WaitForInputIdle 呼び出し、新しいプロセスがアイドル状態になるまで待機してから、最大タイムアウトは 1 分です。

このフラグが必要な場合の詳細については、「解説」セクションを参照してください。

SEE_MASK_FLAG_DDEWAIT (0x00000100) SEE_MASK_NOASYNCと同じように、そのオプションを使用することをお勧めします。
SEE_MASK_DOENVSUBST (0x00000200) lpDirectory または lpFile メンバーによって指定された文字列で指定された環境変数を展開します。
SEE_MASK_FLAG_NO_UI (0x00000400) 通常、このオプションなしで表示されるユーザー インターフェイス (UI) エラー ダイアログは表示しないでください。 セキュリティ プロンプトは除外され、引き続き表示されます。
SEE_MASK_UNICODE (0x00004000) Unicode アプリケーションを示すには、このフラグを使用します。
SEE_MASK_NO_CONSOLE (0x00008000) 新しいコンソールを作成するのではなく、新しいプロセスの親のコンソールを継承するために使用します。 これは、CreateProcessでCREATE_NEW_CONSOLE フラグ 使用するのとは反対です。
SEE_MASK_ASYNCOK (0x00100000) 実行はバックグラウンド スレッドで実行でき、呼び出しはバックグラウンド スレッドが完了するのを待たずに直ちに返されます。 場合によっては、ShellExecuteEx はこのフラグを無視し、プロセスが完了するまで待機してから戻ります。
SEE_MASK_NOQUERYCLASSSTORE (0x01000000) 使用されません。
SEE_MASK_HMONITOR (0x00200000) マルチモニター・システムでモニターを指定する場合は、このフラグを使用します。 モニターは、hMonitor メンバーで指定されます。 このフラグをSEE_MASK_ICONと組み合わせることはできません。
SEE_MASK_NOZONECHECKS (0x00800000) ゾーン チェックは実行しないでください。 このフラグを使用すると、ShellExecuteEx は、IAttachmentExecuteして配置されたゾーン チェックをバイパスできます。
SEE_MASK_WAITFORINPUTIDLE (0x02000000) 新しいプロセスが作成されたら、プロセスがアイドル状態になるまで待ってから、1 分間のタイムアウトで戻ります。 詳細については、WaitForInputIdle の を参照してください。
SEE_MASK_FLAG_LOG_USAGE (0x04000000) 頻繁に使用されるプログラムやその他の動作の追跡を可能にする、ユーザーが起動を開始したことを示します。
SEE_MASK_FLAG_HINST_IS_SITE (0x08000000) hInstApp メンバーは、IServiceProviderを実装するオブジェクトの IUnknown 指定するために使用されます。 このオブジェクトは、サイト ポインターとして使用されます。 サイト ポインターは、ShellExecute 関数、ハンドラー バインド プロセス、および呼び出された動詞ハンドラーにサービスを提供するために使用されます。

ICreatingProcess を指定して、呼び出し元が作成されるプロセスのパラメーターを変更できるようにします。

このフラグは、Windows 8 以降でサポートされています。

このオプションを指定すると、呼び出しは呼び出し元のスレッドで同期的に実行されます。

hwnd

型: HWND

随意。 所有者ウィンドウへのハンドル。この関数の実行中にシステムによって生成される可能性のある UI を表示および配置するために使用されます。

lpVerb

型: LPCTSTR

実行するアクションを指定する、動詞と呼ばれる文字列。 使用可能な動詞のセットは、特定のファイルまたはフォルダーによって異なります。 一般に、オブジェクトのショートカット メニューから使用できるアクションは、動詞として使用できます。 このパラメーターは NULLできます。この場合、既定の動詞が使用されます (使用可能な場合)。 そうでない場合は、"open" 動詞が使用されます。 どちらの動詞も使用できない場合、システムはレジストリに記載されている最初の動詞を使用します。 アクションを特定の動詞に制限する理由がない限り、計算された既定値を使用するには NULL を渡します。 これは、SEE_MASK_FLAG_NO_UIを指定する場合や、アプリがインストールされていない場合に "Open With" UI を生成することを目的とした場合などに必要になります。

次の動詞が一般的に使用されます。

  • 編集: エディターを起動し、編集用にドキュメントを開きます。 lpFile ドキュメント ファイルでない場合、関数は失敗します。
  • を調べる: lpFileで指定されたフォルダー 調べられます。
  • を検索 : 指定したディレクトリから検索を開始します。
  • を開 : lpFile パラメーターで指定されたファイルを開きます。 ファイルには、実行可能ファイル、ドキュメント ファイル、またはフォルダーを指定できます。
  • openas: ユーザーが、lpFile パラメーターで指定されたファイルを開くアプリを選択できるピッカー UI を起動します。
  • 印刷: lpFileで指定されたドキュメント ファイル 印刷します。 lpFile ドキュメント ファイルでない場合、関数は失敗します。
  • プロパティ: ファイルまたはフォルダーのプロパティを表示します。
  • runas: 管理者としてアプリケーションを起動します。 ユーザー アカウント制御 (UAC) は、アプリケーションを管理者特権で実行するか、アプリケーションの実行に使用する管理者アカウントの資格情報を入力する同意をユーザーに求めます。

lpFile

型: LPCTSTR

shellExecuteEx が lpVerb パラメーターで指定されたアクション を実行するファイルまたはオブジェクトの名前を指定する null で終わる文字列のアドレス。 ShellExecuteEx 関数でサポートされているシステム レジストリ動詞には、実行可能ファイルとドキュメント ファイルの "開く" と、印刷ハンドラーが登録されているドキュメント ファイルの "印刷" が含まれます。 他のアプリケーションでは、.avi ファイルや.wav ファイルの "再生" など、システム レジストリを介してシェル動詞が追加されている場合があります。 シェル名前空間オブジェクトを指定するには、完全修飾解析名を渡し、fMask パラメーターに SEE_MASK_INVOKEIDLIST フラグを設定します。

注: SEE_MASK_INVOKEIDLIST フラグが設定されている場合は、lpFile または lpIDList を使用して、ファイル システム パスまたはその PIDL で項目を識別できます。 lpFile または lpIDList2 つの値のいずれかを設定する必要があります。
注: パスが名前に含まれていない場合、現在のディレクトリが想定されます。

lpParameters

型: LPCTSTR

随意。 アプリケーション パラメーターを含む null で終わる文字列のアドレス。 パラメーターはスペースで区切る必要があります。 lpFile メンバーがドキュメント ファイルを指定する場合は、lpParameters NULLする必要があります。

lpDirectory

型: LPCTSTR

随意。 作業ディレクトリの名前を指定する null で終わる文字列のアドレス。 このメンバーが NULL場合、現在のディレクトリが作業ディレクトリとして使用されます。

nShow

型: int

必須。 アプリケーションを開くときに表示する方法を指定するフラグ。ShellExecute 関数に一覧表示されているSW_値の 1 つ。 lpFile ドキュメント ファイルを指定する場合、フラグは関連付けられているアプリケーションに渡されます。 その処理方法を決めるのはアプリケーションの判断です。

hInstApp

型: HINSTANCE

[out]SEE_MASK_NOCLOSEPROCESSが設定され、ShellExecuteEx 呼び出しが成功した場合、このメンバーは 32 より大きい値に設定されます。 関数が失敗した場合は、エラーの原因を示すSE_ERR_XXXエラー値に設定されます。 hInstApp は、16 ビット Windows アプリケーションとの互換性のために HINSTANCE として宣言されていますが、実際の HINSTANCE ではありません。 これは、32 または次のSE_ERR_XXXエラー コードと比較して、int にのみキャストできます。


エラー コード 理由
SE_ERR_FNF (2) ファイルが見つかりません。
SE_ERR_PNF (3) パスが見つかりません。
SE_ERR_ACCESSDENIED (5) アクセスが拒否されました。
SE_ERR_OOM (8) メモリ不足。
SE_ERR_DLLNOTFOUND (32) ダイナミック リンク ライブラリが見つかりません。
SE_ERR_SHARE (26) 開いているファイルを共有できません。
SE_ERR_ASSOCINCOMPLETE (27) ファイルの関連付け情報が完全ではありません。
SE_ERR_DDETIMEOUT (28) DDE 操作がタイムアウトしました。
SE_ERR_DDEFAIL (29) DDE 操作に失敗しました。
SE_ERR_DDEBUSY (30) DDE 操作がビジー状態です。
SE_ERR_NOASSOC (31) ファイルの関連付けは使用できません。

lpIDList

型: LPVOID

実行するファイルを一意に識別する項目識別子リストを格納する絶対 ITEMIDLIST 構造体 (PCIDLIST_ABSOLUTE) のアドレス。 fMask メンバーに SEE_MASK_IDLIST または SEE_MASK_INVOKEIDLISTが含まれていない場合、このメンバーは無視されます。

lpClass

型: LPCTSTR

次のいずれかを指定する null で終わる文字列のアドレス。

  • ProgId。 たとえば、"Paint.Picture" などです。
  • URI プロトコル スキーム。 たとえば、"http" などです。
  • ファイル拡張子。 たとえば、".txt" などです。
  • 1 つ以上のシェル動詞を含むサブキーに名前を付HKEY_CLASSES_ROOTの下のレジストリ パス。 このキーには、シェル動詞レジストリ スキーマに準拠するサブキーが含まれます。たとえば、シェル動詞名します。

fMask SEE_MASK_CLASSNAMEが含まれていない場合、このメンバーは無視されます。

hkeyClass

型: HKEY

ファイルの種類のレジストリ キーへのハンドル。 このレジストリ キーのアクセス権は、KEY_READに設定する必要があります。 fMask SEE_MASK_CLASSKEYが含まれていない場合、このメンバーは無視されます。

dwHotKey

型: DWORD

アプリケーションに関連付けるキーボード ショートカット。 下位ワードは仮想キー コードであり、上位ワードは修飾子フラグ (HOTKEYF_) です。 修飾子フラグの一覧については、WM_SETHOTKEY メッセージの説明を参照してください。 fMask SEE_MASK_HOTKEYが含まれていない場合、このメンバーは無視されます。

DUMMYUNIONNAME

DUMMYUNIONNAME.hIcon

型: HANDLE

ファイルの種類のアイコンへのハンドル。 fMask SEE_MASK_ICONが含まれていない場合、このメンバーは無視されます。 この値は、Windows XP 以前でのみ使用されます。 Windows Vista の時点では無視されます。

DUMMYUNIONNAME.hMonitor

型: HANDLE

ドキュメントを表示するモニターのハンドル。 fMask SEE_MASK_HMONITORが含まれていない場合、このメンバーは無視されます。

hProcess

型: HANDLE

新しく開始されたアプリケーションのハンドル。 このメンバーは戻り値に設定され、fMask が SEE_MASK_NOCLOSEPROCESSに設定されていない限り、常に NULL fMaskSEE_MASK_NOCLOSEPROCESSに設定されている場合でも、プロセス 起動されなかった場合、hProcess は NULL されます。 たとえば、起動するドキュメントが URL で、Internet Explorer のインスタンスが既に実行されている場合は、ドキュメントが表示されます。 新しいプロセスは起動されません。hProcess は NULLされます。

注:ShellExecuteEx は、呼び出しの結果としてプロセスが起動された場合でも、hProcessを常に返すとは限りません。 たとえば、SEE_MASK_INVOKEIDLIST を使用して IContextMenuを呼び出すときに、hProcess 返されません。

備考

SEE_MASK_NOASYNC フラグは、ShellExecuteEx 呼び出すスレッドにメッセージ ループがない場合、または ShellExecuteEx が戻った直後にスレッドまたはプロセス 終了する場合に指定する必要があります。 このような状況では、呼び出し元スレッドは DDE 会話を完了できないため、呼び出し元アプリケーションに制御を返す前に、ShellExecuteEx 会話を完了することが重要です。 会話を完了しないと、ドキュメントの起動に失敗する可能性があります。

呼び出し元のスレッドにメッセージ ループがあり、ShellExecuteEx の呼び出し 戻ってからしばらく存在する場合、SEE_MASK_NOASYNC フラグは省略可能です。 フラグを省略すると、呼び出し元スレッドのメッセージ ポンプを使用して DDE 会話が完了します。 DDE の会話はバックグラウンドで完了できるため、呼び出し元のアプリケーションは制御を早く回復します。

lpParametersに二重引用符 含めるには、次の例のように、各マークを二重引用符で囲みます。

sei.lpParameters = "An example: \"\"\"quoted text\"\"\"";

この場合、アプリケーションは 3 つのパラメーターを受け取ります。例:"引用符で囲まれたテキスト"

手記

shellapi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして SHELLEXECUTEINFO を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルまたは実行時エラーが発生する不一致につながる可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー shellapi.h