次の方法で共有


Visual C++ を使用して既定のインターネット ブラウザーをプログラムで起動する

この記事では、Visual C++ のマネージド拡張機能を使用して既定のインターネット ブラウザーを開始する方法について説明します。

元の製品バージョン: Visual C++
元の KB 番号: 307382

注:

開く URL、FTP、またはファイルを指定する

Uniform Resource Locator (URL)、ファイル、またはファイル転送プロトコル (FTP) アドレスを指定できます。 これらの 3 つの割り当ては、すべて有効です。

System::String * target= "http://www.microsoft.com";
System::String * target = "ftp://ftp.microsoft.com";
System::String * target = "C:\\Program Files\\Microsoft Visual Studio\\INSTALL.HTM";

Process クラスの Start メソッドを使用してブラウザーを起動する

クラスには Process 静的 Start メソッドが含まれています。 これは静的メソッドであるため、クラスのProcessインスタンスを持たずに を呼び出Startすことができます。

System::Diagnostics::Process::Start(target);

例外処理を提供する

メソッドを呼び出すとき に既定 UseShellExecute のプロパティStart 利用するため、レジストリに対して明示的にクエリを実行して、どのブラウザーが既定であるかを判断する必要はありません。 ただし、ブラウザーがインストールされていないコンピューターでこの方法を使用すると、例外が発生します。 適切なアクションを実行できるように、この例外をキャッチする必要があります。 この例では、必要なレジストリ キーが見つからないときに生成されるエラーを明示的にトラップし、ブラウザーがインストールされていないことを示します。 さらに、発生する可能性があるその他のエラーに対して、一般的な例外ハンドラーが提供されます。 この try...catch ブロックは、完全なコード サンプルで示されています。

完全なコード サンプル

#using <mscorlib.dll>
#using <system.dll>
#using <System.Windows.Forms.dll>
int main()
{
    //Use no more than one assignment when you test this code.
    //System::String * target= "http://www.microsoft.com";
    //System::String * target = "ftp://ftp.microsoft.com";
    System::String * target = "C:\\Program Files\\Microsoft Visual Studio\\INSTALL.HTM";
    try
    {
        System::Diagnostics::Process::Start(target);
    }
    catch (System::ComponentModel::Win32Exception * noBrowser)
    {
        if (noBrowser->ErrorCode==-2147467259)
           System::Windows::Forms::MessageBox::Show(noBrowser->Message);
    }
    catch (System::Exception * other)
    {
        System::Windows::Forms::MessageBox::Show(other->Message);
    }
    return 0;
}

トラブルシューティング

このコードは、レジストリのHKEY_CLASSES_ROOT hive 内のアプリケーション ファイルの種類の関連付けに大きく依存します。 これは、レジストリが破損している場合に予期しない結果と例外につながる可能性があります。 さらに、ファイルの種類と拡張子は、ブラウザー以外のアプリケーションに関連付けられている場合があります。 たとえば、HTM または Hyper Text Markup Language (HTML) ファイルは、ブラウザーではなく Web 開発ソフトウェアに関連付けられている場合があります。