C++ の shellExecute() 関数

Naila Saad Siddiqui 2023年10月12日
  1. C++ の ShellExecute() 関数
  2. ShellExecute() 関数を使用する利点
  3. ShellExecute() 関数を使用するデメリット
C++ の shellExecute() 関数

この小さなプログラミング チュートリアルでは、C++ の ShellExecute() ライブラリ関数について説明します。 このライブラリ関数は、主に C++ プログラムを介して任意のファイル (スクリプト ファイルなど) を開いたり実行したりするために使用されます。

C++ の ShellExecute() 関数

ShellExecute() は、C++ 標準ライブラリで提供されるライブラリ関数であり、C++ プログラムから任意の実行可能ファイルを開いたり実行したりするために使用されます。 必要なファイルを開くプログラムを気にする必要はありません。 開く必要があるファイルのパスまたは名前を指定するだけです。

これは、マウスでアイコンをクリックする Windows のアクションに似ており、アイコンが開きます。 これは、C++ プログラミングを使用してこのアクションを自動化するために使用されます。

ShellExecute() が好まれている主な理由の 1つは、この API 呼び出しを使用してほとんど何でも実行できることです。

提供されたファイルが実行可能でない場合、ShellExecute API はレジストリを検索して、指定されたファイルを起動する適切なプログラムを探します。 たとえば、ファイル名に拡張子 .txt を指定すると、ファイルが読み込まれた状態でメモ帳が起動する可能性があります。

関数のシグネチャは次のとおりです。

HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile,
                       LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd);

パラメータの詳細を見てみましょう。

  • hwnd: 親ウィンドウへの参照を保存するためのハンドルです
  • lpOperation: ファイルに対して実行する必要があるアクションの名前です。 以下は、使用できるアクションのリストです。
    • open または NULL - lpFile ファイルは関数によって開かれます。 ファイルは、ドキュメント ファイルまたは実行可能ファイルの場合があります。 開くフォルダー名を指定することもできます。
    • print - lpFile で指定されたファイルがドキュメント ファイルの場合、関数はそれを印刷のためにプリンターに送信します。
    • explore - lpFile で指定されたファイルがフォルダーの名前である場合、関数はそのフォルダーを探索します。
  • lpFile: これは、ファイル、フォルダー、または実行可能ファイルの名前です。
  • lpParameters: これは、追加のコマンドライン パラメータを提供するために使用されます。
  • lpDirectory: これは、デフォルト ディレクトリのパスを指定するために使用されます。
  • nShowCmd 関数で指定されたファイルを開く方法を示します。 その値は次のいずれかです。
    • SW_HIDE - 現在のアプリケーション ウィンドウを非表示にした後、新しいアプリケーション ウィンドウを表示します。
    • W_MAXIMIZE - 指定したウィンドウを最大化して表示します。
    • SW_MINIMIZE - 指定されたウィンドウを最小化して表示し、次のレベルのウィンドウを表示します。
    • SW_SHOW - 指定されたウィンドウをデフォルトのサイズと位置でアクティブにします
    • SW_SHOWMAXIMIZED - 最初にウィンドウをアクティブにし、最大化された形式で表示します。
    • SW_SHOWMINIMIZED - 最初にウィンドウをアクティブにし、最小化された形式で表示します。
    • SW_SHOWNORMAL - ウィンドウを有効にして表示します。 ウィンドウが最小化または最大化されている場合、ウィンドウは元のサイズと場所に戻ります。 ウィンドウが最初に表示されるとき、アプリケーションはこのフラグを提供する必要があります。
    • lpFile が指定されたドキュメント ファイルである場合、nShowCmd 値は 0 に設定する必要があります。

成功すると、ShellExecute() は 31 より大きい値を返します。 それ以外の場合、戻り値は次のようになります。

  • 0: オペレーティング システムがメモリまたはリソースを提供しない場合。
  • ERROR_FILE_NOT_FOUND – 指定されたファイルがその場所に見つかりません。
  • ERROR_PATH_NOT_FOUND – 指定されたパスが間違っているか、見つかりません。
  • ERROR_BAD_FORMAT – 無効な .exe ファイルが提供されています。

他にも多くのエラー コードが存在する可能性がありますが、いくつかの一般的なエラーについて説明しました。

ShellExecute() 関数のコーディング例を見てみましょう。

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;

int main() {
  ShellExecute(NULL, "open", "MyTextFile.txt", NULL, NULL, SW_SHOWMAXIMIZED);
  return 0;
}

コードの実行後、メモ帳プログラムで MyTextFile が開かれます。 同様に、次のようにブラウザで開く URL も指定できます。

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;

int main() {
  char webUrl[100] = "www.google.com";
  ShellExecute(NULL, "open", webUrl, NULL, NULL, SW_SHOWNORMAL);
  return 0;
}

ShellExecute() 関数を使用することには、次のような多くの利点と欠点があります。

ShellExecute() 関数を使用する利点

この API 呼び出しは、標準の Windows 設定を使用して、ファイルまたはフォルダーを開いたり、印刷したり、参照したりできます。 これらのデフォルトも変更できます。

すべてのパラメータを入力する必要はありません。 それらのいくつかは NULL にすることができます (つまり、使いやすさ)。

ShellExecute() 関数を使用するデメリット

ShellExecute 経由で 16 ビット ソフトウェアを実行することはできません。 複雑さは WinExec に匹敵します。

生成されたプログラムがいつ完了したかを示すことはできません。

関連記事 - C++ Function