URLを好きなブラウザで開けるBrowser Picker代替を自作した

Windowsで色々な行うようになって不便なのが規定のブラウザの切り替えである。 コンテキスト(URLの中身、現在起動しているブラウザなどなど)によってSlack, DiscordなどのアプリからURLをクリックした場合に起動するブラウザやプロファイルを変更したい。

そういうツールがないか調べたところ Browser Picker というものがあり、やりたいことの8割はできるのでこれでいい感じだった。ただ一点、細かい不満があるとすれば起動が遅いことである。リンクをクリックしたあと、一瞬遅れてブラウザが起動するのでもっさりを感じる。.net とC#で書かれているからだろうか

我慢できないほどではないが、いい機会なので自分で作ってみようと思ったのが以下のものである

github.com

アーキテクチャ

Visual C++ 2022でWindows APIをゴリゴリに使う形でやっている。C/C++もある程度わかるのでいけるかと思ったが、Linux / UNIXっぽいものに慣れた人間としては別の宇宙というか学習コストが高すぎる。ChatGPT の助けを借りながらこの小さいアプリケーションを作るのでさえ苦労した。

解決したこと

自由にロジックが書けるのでやりたいことは全部できるようになった。またBrowser Pickerで感じていた動作のもっさりは完全になくなり、ネイティブにブラウザでURLが開かれるのと遜色ないスピードとなった。

現状の問題点

おそらくこれはWindows 11の制限なのだが、レジストリをどう設定しても設定アプリからHTTP/HTTPSにこのアプリを選択することができない。どうもHTTP/HTTPS/MAILTOなどのリンク系の関連付けにはアプリがWindowsにインストール / 登録されている必要があるのかもしれない。

妥協案

もうBrowser Pickerはいらないので、レジストリのBrowser Pickerの起動コマンドを自作ツールの実行ファイルに書き換えたところ、あっさり動いた

[HKEY_CLASSES_ROOT\BrowserPicker\shell\open\command]
@="\"C:\\BrowserLauncher\\BrowserLauncher\\x64\\Debug\\BrowserLauncher.exe\" \"%1\""

釈然としないが、このちょっとした自分用ツールでインストールの仕組み(や、もしかしたら署名関係など)まで導入するやる気はないのでこのままである

Windowsもう少しこの辺自由度高いとうれしい