ブラウザからデスクトップアプリをパラメータを渡して起動する
やりたいこと
ブラウザ上のリンクをクリックすると、PowerDVDで動画が再生される。動画のパスはUNCパス形式でパラメータとして渡す。
(以前の記事)URIスキームでブラウザから電卓を起動する方法 (yunogotoshi.blogspot.com)
前提
ブラウザからデスクトップアプリを起動することは原則としてできない。ただし、カスタムURLスキームをレジストリに登録すると、指定したデスクトップアプリを起動できるようです。URLスキームというのは ブラウザからリンクをクリックするとメールは起動できますよね。mailto: とか、こういうのです。
ブラウザ上のリンクから任意のデスクトップアプリのファイルを開けると超便利 #初心者 - Qiita を参考(ほぼ同じですが)にしました。
事前準備
❶レジストリ登録
※レジストリ変更によりパソコンが起動しなくなったり、セキュリティの低下につながる可能性があります。自己責任で実施してください。
以下のソースをnotepad等に張り付けて、拡張子をregにして保存し、実行します。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\movieplayer] @="URL:movieplayer Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\movieplayer\shell] [HKEY_CLASSES_ROOT\movieplayer\shell\open] [HKEY_CLASSES_ROOT\movieplayer\shell\open\command] @="\"C:\\StartProc\\StartProcPowerDVD22.exe\" \"%1\""
レジストリエディタで確認すると下図のようになっています。
❷PowerDVD22起動コンソールアプリ StartProcPowerDVD22.exe の作成
Visual Studio でビルドしました。引数(パラメータで動画のUNCパス)がURLエンコードされていたので、デコードしました。
using System; using System.Diagnostics; namespace StartProcPowerDVD22 { class Program { static void Main(string[] args) { string decodedString = System.Net.WebUtility.UrlDecode(args[0]); if (decodedString.StartsWith("movieplayer:")) { var filePath = decodedString.Substring("movieplayer:".Length); Process.Start("C:\\Program Files\\CyberLink\\PowerDVD22\\PowerDVD.exe", filePath); Console.WriteLine(filePath); } } } }
❸htmlの作成
<html>
<head>
<meta charset="UTF-8">
<title>カスタムスキーマ テスト</title>
</head>
< body>
<a href="movieplayer:\\hogehoge\hogehoge.mp4">WebからPowerDVD22を起動再生する</a>
<br>
<a href="movieplayer:\\hogehoge\ほげほげ.mp4">日本語が含まれるパスについてWebからPowerDVD22を再生する</a>
</body>
< /html>
処理の流れ(今回の例)
❸のhtmlをブラウザで開きURLリンク(URLスキームと再生したい動画のUNCパス)をクリック
↓
レジストリのURLスキーム(movieplayer)を参照しに行く
↓
❶のURLスキームに登録された StartProcPowerDVD22.exe(自作のC#コンソールアプリ) が実行される。この時再生したい動画の
UNCパスが StartProcPowerDVD22.exe に渡される。
↓
❸のStartProcPowerDVD22.exe が 再生したい動画のUNCパス をパラメータ指定して PowerDVD.exe を起動する
↓
PowerDVD22が起動して動画が再生される
★ポイント★
URLスキームに PowerDVD22.exe 登録した場合はPowerDVD22は起動しますが、再生したい動画は再生されませんでした。StartProcPowerDVD22.exe のような中継アプリを挟む必要がありました。
アプリを開く際に確認ダイアログを出さないようにする
グループポリシーで設定します。Edgeを使っているのでEdgeのグループポリシーを設定します。Edgeのグループポリシーテンプレートは標準で組み込まれていないません(2024/1/28時点)。
以下の手順で組み込みました。
(参考にしたサイト)
Microsoft Edgeのグループポリシーがない時の対処法|あんもちブログ (watapipi.com)
ポリシーテンプレートをダウンロード
https://www.microsoft.com/ja-jp/edge/business/download
うちはWindows 11なのでこれ。
ダウンロードしたテンプレートを追加
ダウンロードしたCABファイルをダブルクリックで展開
↓
ZIPの中のファイルのうち
グループポリシーの設定
1行テキストでないと入力できないのでそのサンプル
[{"allowed_origins":["vmjb"],"protocol":"movieplayer"}]
上記の構造です。
[
コメント
コメントを投稿