ShellExecuteExA 関数 (shellapi.h)

指定したファイルに対して操作を実行します。

構文

BOOL ShellExecuteExA(
  [in, out] SHELLEXECUTEINFOA *pExecInfo
);

パラメーター

[in, out] pExecInfo

型: SHELLEXECUTEINFO*

実行中のアプリケーションに関する情報を格納および受信する SHELLEXECUTEINFO 構造体へのポインター。

戻り値

種類: BOOL

成功した場合は TRUE を 返します。それ以外の場合は FALSE。 拡張エラー情報については 、GetLastError を呼び出します。

解説

ShellExecuteEx は、コンポーネント オブジェクト モデル (COM) を使用してアクティブ化されたシェル拡張機能 (データ ソース、コンテキスト メニュー ハンドラー、動詞の実装) に実行を委任できるため、ShellExecuteEx が呼び出される前に COM を初期化する必要があります。 一部のシェル拡張機能では、COM シングル スレッド アパートメント (STA) 型が必要です。 その場合は、次に示すように COM を初期化する必要があります。

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)

ShellExecuteEx がこれらの種類のシェル拡張機能のいずれかを使用せず、それらのインスタンスで COM を初期化する必要がまったくないインスタンスがあります。 ただし、この関数を使用する前に常に COM を初期化することをお勧めします。

DLL がプロセスに読み込まれると、 ローダー ロックと呼ばれるロックが取得されます。 DllMain 関数は常にローダー ロックの下で実行されます。 ローダー ロックを保持している間は ShellExecuteEx を呼び出さないことを重要です。 ShellExecuteEx は拡張可能であるため、ローダー ロックの存在下で正常に機能しないコードを読み込み、デッドロックが発生し、応答しないスレッドが発生する可能性があります。

複数のモニターでは、HWND を指定し、lpExecInfo が指す SHELLEXECUTEINFO 構造体の lpVerb メンバーを "Properties" に設定すると、ShellExecuteEx によって作成されたウィンドウが正しい位置に表示されないことがあります。

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

SE_ERR_XXXエラー値は、 ShellExecute との互換性のために提供されます。 より正確なエラー情報を取得するには、 GetLastError を使用します。 次のいずれかの値を返す場合があります。

エラー 説明
ERROR_FILE_NOT_FOUND The specified file was not found. (指定されたファイルは見つかりませんでした。)
ERROR_PATH_NOT_FOUND 指定したパスが見つかりませんでした。
ERROR_DDE_FAIL 動的データ交換 (DDE) トランザクションが失敗しました。
ERROR_NO_ASSOCIATION 指定したファイル名拡張子に関連付けられているアプリケーションはありません。
ERROR_ACCESS_DENIED 指定したファイルへのアクセスは拒否されます。
ERROR_DLL_NOT_FOUND アプリケーションを実行するために必要なライブラリ ファイルの 1 つが見つかりません。
ERROR_CANCELLED 関数はユーザーに追加情報の入力を求めたが、ユーザーは要求を取り消した。
ERROR_NOT_ENOUGH_MEMORY 指定したアクションを実行するのに十分なメモリがありません。
ERROR_SHARING_VIOLATION 共有違反が発生しました。
 

URL からアイテムを開く URL が渡されたときにアクティブ化するようにアプリケーションを登録できます。 アプリケーションでサポートされるプロトコルを指定することもできます。 詳細については、「 アプリケーションの登録 」を参照してください。

サイト チェーンのサポート Windows 8 以降では、 ShellExecuteEx 関数へのサイト チェーン ポインターを指定して、そのサイトのサービスを使用した項目のアクティブ化をサポートできます。 詳細については、「 アプリケーションの起動 (ShellExecute、ShellExecuteEx、SHELLEXECUTEINFO)」 を参照してください。

注意

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

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shellapi.h
Library Shell32.lib
[DLL] Shell32.dll (バージョン 3.51 以降)

関連項目

CoInitializeEx

IShellExecuteHook

アプリケーションの起動 (ShellExecute、ShellExecuteEx、SHELLEXECUTEINFO)

ShellExecute