ブラウザからデスクトップアプリをパラメータを渡して起動する

やりたいこと

ブラウザ上のリンクをクリックすると、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の中のファイルのうち


↓にコピー
C:\Windows\PolicyDefinitions

同様に

↓にコピー
C:\Windows\PolicyDefinitions\ja-JP

追加されました。

グループポリシーの設定

全ユーザー共通にしたいのでコンピューターの構成に設定を入れます。




1行テキストでないと入力できないのでそのサンプル

インターネットサイトからたまたまプロトコル名(URLスキーム)が一致して呼び出されるのも怖いので、自作のWebアプリ MovieJukeBox(vmjb)からのみ応答なしに開けるようにします。

[{"allowed_origins":["vmjb"],"protocol":"movieplayer"}]


上記の構造です。

[
    {
        "allowed_origins":[
            "vmjb"
        ],
        "protocol":"movieplayer"
    }
]



設定したらパソコンを再起動するか gpupdate /force で設定を反映させる

コンピューターの構成なので管理者権限を使う







グループポリシーエディタ内のサンプル値

[
  {
    "allowed_origins": [
      "example.com",
      "http://www.example.com:8080"
    ],
    "protocol": "spotify"
  },
  {
    "allowed_origins": [
      "https://example.com",
      "https://.mail.example.com"
    ],
    "protocol": "msteams"
  },
  {
    "allowed_origins": [
      "*"
    ],
    "protocol": "msoutlook"
  }
]

コメント

このブログの人気の投稿

ダブルクォーテーションで括られたCSVカ​ンマ区切りテキストファイルを SQL Server で Bulk Insert する方法

PowerShellでTSV/CSVの列を絞り込んで抽出し、(先頭/行末)からN行出力する

IKEAの鏡を壁に取り付ける