C# 既定のブラウザでURLを開けずエラーの対処

C# でプログラムからURLを開こうとして既定のブラウザを呼び出すがエラーになってしまう場合

以前はURLを開こうとする時は、Microsoftのページによると、URLをtargetにいれてProcess.Start(target);
のようにすると書いてある。以下そのページ抜粋

string target= "http://www.microsoft.com";
//Use no more than one assignment when you test this code.
//string target = "ftp://ftp.microsoft.com";
//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)
    MessageBox.Show(noBrowser.Message);
}
catch (System.Exception other)
{
    MessageBox.Show(other.Message);
}

しかし、いくつかのWindows環境によって、ErrorCode -2147467259にあてはまってしまって、ブラウザ起動に失敗するようです。いや、むしろ失敗することのほうがが多いような気がする。
また、以下のようにFileName = urlとしてProcess.Startする様に書くのも以前は可能だったが・・・

    ProcessStartInfo pri = new ProcessStartInfo()
    {
        FileName = url,
        UseShellExecute = true,
    };

    Process.Start(pri);

今は、このFileNameにURLを代入すると駄目のようだ。
Microsoftさん、デフォルトのブラウザを自分の所のブラウザから変更してほしくないためですか??
とってもブラウザの変更はして欲しくないのでしょうね・・(私見です)
見事にいつの間にか仕様変更してるような気がします。
でも変更したならマニュアルのページも変更してほしいですね~

というわけで、FileName は起動ブラウザのファイルパスを入れ、Arguments にURLを入れればOK
まあ、これのほうがすっきりはしてますねぇ・・・

そんな訳で実際の呼び出しは、urlに実際のURLを入れてレジストリのデフォルトのブラウザを調べて起動です。以下参考に

string url= "http://www.microsoft.com";

//レジストリキー(HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice)
//を、新規作成されない様に開く
Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
                @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice", false);

//レジストリ"ProgId"の値を読み取り
string progId = regkey.GetValue("ProgId").ToString();

//"progID"の書かれているキーを開く
regkey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(
                string.Format(@"{0}\shell\open\command", progId), false);

//command作成
string command =regkey.GetValue(null).ToString();
// commandには"C:\Program Files\Google\Chrome\Application\chrome.exe" --single-argument %1 のように
//ファイパス以降に不要な文字が入るので 2つめの'”'を探してそれ以降を削除する
string gomiStr = command.Substring(command.IndexOf("\"", command.IndexOf("\"") + 1) + 1);
command = command.Replace(gomiStr, "");

ProcessStartInfo info = new ProcessStartInfo();
info.UseShellExecute = true;
// デフォルトブラウザ
info.FileName = command;
// URLを加える
info.Arguments = url;
Process p = new Process();
p.StartInfo = info ;

try
{
   p.Start();
}
catch (System.ComponentModel.Win32Exception noBrowser)
{
   if (noBrowser.ErrorCode == -2147467259)
   MessageBox.Show("ブラウザー関連のレジストリに異常がある可能性もあり。"
                        + Environment.NewLine
                        + noBrowser.Message);
}
catch (Exception ex)
{
   MessageBox.Show("エラーが発生しました: " + ex.Message);
}

これでnoBrowser.ErrorCode == -2147467259のエラーは出ずにブラウザが起動してURL表示できているようです。
でもせっかくなんだから、いちいち調べて起動しなくても良いようになれば良いのですがねぇ。

DSO-TC3を買ってみた!!

ユーチューブ等で人気のデジタル・オシロスコープ & トランジスタテスター&ジェネレーター DSO-TC3

何やら、ユーチューブで賑わしているDSO-T3が気になりAliExpressから入手してみました。

AliExpressなので入手に敷居は非常に高いのですが、問題が起こらないようにPaypalを使って個人情報が漏れないように気をつけて取り寄せました。結果、無事に到着して安心しました。
使った感想ですが、私のような年間数回しかハンダごてを握らないエセ技術者にはピッタリ。
十分ですね!
電子部品のチェックには簡単だし、オシロスコープやシグナルジェネレーター、プローブまで付いて7000円位なら買いだと思います。最近の中国製品面白いものが多く出ています。もう少し日本も頑張ろう!!
では早速、オペアンプでヘッドホンアンプの作成を始めましょうか・・・
趣味の時間が増えそうです。

そうそう! DSO154Proも気になりますね!

QRCodeMaker(QRコード作成、読取りソフト)

QRCodeMaker

QRCodeやバーコードの作成、読み取りが出来る
Windows10、11対応のフリーソフト

Windows上で、QRCodeと、その他のいくつかの種類のバーコードの作成と読取りを目的に勉強がてらC#で作成しました。
扱える種類は、QRコード(ロゴ有り、ロゴなし)、バーコードはCODE39、CODE128、JAN、ITF。
作成、読取りの両方に対応しています。
お手持ちのパソコンのWebカメラからの直接読取りはもちろん、画像ファイルからや、またブラウザ等で表示中の時など、パソコン画面に表示されている状態なら、画面のキャプチャによって読取れるようになっています。色々な条件での読取りが出来ますので非常に便利かと思っています。
また、画面キャプチャーが出来、ファイル保存機能もあるので普通にキャプチャーソフトとして使っていただくのも有りかと思います。
新機能として、最近流行しているロゴ付きのQRコード。好きなロゴを付加出来るようになりました。

ダウンロードしたファイルを解凍したら、中のQRCodeMaker.msiをダブルクリックでインストールします。初回起動はWindowsお決まりの認識されないアプリとしてエラーが出ることがありますが
「詳細情報」をクリック「実行」を押して先に進んでください。
本ソフトはフリーソフトです。ウイルス等の混入は極力無いようにチェックしておりますが、ご使用上での不具合はサポート外と致します。自己責任の上でご使用下さいますようお願い致します。

Ver.1.0.0.2 2024/02/27 リビジョンアップしました。