未来の自分へ知識貯金

ゆーきのエンジニアブログ

約3分 C#Visual Studioプログラミング

【C#】Google検索する(ブラウザを開く)

【C#】Google検索する(ブラウザを開く)

C#を使って指定のキーワードでブラウザを開き、Google検索を行うコードを記載します。

自作ツールに「このワードでそのまま検索したい」というボタンを付けたいことがあります。たとえばエラーメッセージをそのまま検索したいときや、リストで選んだ商品名・型番をすぐ調べたいときです。ソフトから自動で既定のブラウザを開き、検索結果を表示するところまでやります。

結論のコード

using System.Diagnostics;

public void GoogleSearch(string keyword)
{
    string searchUrl = "https://www.google.com/search?q=" + Uri.EscapeDataString(keyword);
    Process.Start(new ProcessStartInfo(searchUrl));
}

呼び出し側はこれだけです。

GoogleSearch("C# ブラウザ 開く");

実行すると、Windows に設定されている既定のブラウザ(Edge や Chrome など)が起動し、検索結果ページが表示されます。私はこのコードを .NET Framework のデスクトップアプリで使っていて、これで問題なく動いていました。

追記:.NET 5以降で使うなら UseShellExecute を指定すべき

上のコードは .NET Framework では動きますが、.NET Core / .NET 5 以降(.NET 6, .NET 8 など)に持っていく場合は注意が必要です。同じ書き方では動かず、Win32Exception(指定されたファイルが見つかりません)が発生するとされています。

最近の .NET では、次のように UseShellExecute = true を明示するのが正しい書き方です。

Process.Start(new ProcessStartInfo(searchUrl) { UseShellExecute = true });

動かなくなる理由は、Process.Start の既定値が変わったためです。

  • .NET Framework: UseShellExecute の既定値は true
  • .NET Core / .NET 5 以降: 既定値が false に変更された

UseShellExecutetrue のときは Windows のシェル(エクスプローラーでダブルクリックしたときと同じ仕組み)経由で起動するため、URL を渡すと「既定のブラウザで開く」という関連付けが働きます。false のときは exe ファイルを直接起動しようとするため、URL は「そんなファイルはない」と怒られてしまうわけです。

UseShellExecute = true を明示する書き方なら .NET Framework でも新しい .NET でも同じ意味になるので、これから書くコードはこちらに統一しておくのが安全です。

日本語キーワード対策:Uri.EscapeDataString

もうひとつ地味に大事なのが Uri.EscapeDataString です。

Google 検索の URL は https://www.google.com/search?q=キーワード という形式ですが、キーワードに日本語・スペース・&# などの記号がそのまま入っていると、URL として正しく解釈されません。

Uri.EscapeDataString("C# 配列 コピー")
// → "C%23%20%E9%85%8D%E5%88%97%20%E3%82%B3%E3%83%94%E3%83%BC"

このように URL エンコードしてから連結することで、日本語もスペース入りの複数キーワードも安全に渡せます。特に C## はエンコードしないと # 以降が URL のフラグメント扱いになって消えてしまうので、C# の記事を検索するツールでは必須です(笑)

応用:検索エンジンを切り替える

URL の形式を変えれば、Google 以外の検索にもそのまま使えます。

// Bing で検索
string bingUrl = "https://www.bing.com/search?q=" + Uri.EscapeDataString(keyword);

// Google 画像検索
string imageUrl = "https://www.google.com/search?tbm=isch&q=" + Uri.EscapeDataString(keyword);

検索エンジン部分を設定ファイルに持たせておけば、ユーザーが好みの検索エンジンを選べるツールにもできます。

まとめ

  • C# からブラウザで Google 検索するには Process.Start + ProcessStartInfo を使う(.NET Framework では冒頭のコードで動作)
  • .NET Core / .NET 5 以降に持っていくなら UseShellExecute = true の明示が必要(最重要)
  • キーワードは Uri.EscapeDataString でエンコードしてから URL に連結する

3行のメソッドですが、UseShellExecute の既定値の違いは知らないとハマりやすいポイントです。同じところで詰まった方の参考になれば幸いです。

この記事をシェアする

ゆーき
ゆーき

プログラマー経験10年以上。好きなプログラム言語はC#。使える言語はC++, Python他。好きな開発環境はVisual Studio。

プロフィールを見る →