カスタム URL スキーム の 設定 と 利用

0 件のコメント

今回は、Windows パソコン において、カスタム URL スキーム を設定して、任意の アプリケーション を起動する方法を載せます。

ちなみに、"カスタム URL スキーム" は、"外部プロトコルリクエスト" とか "プロトコルハンドラ"、"Pluggable Protocol Handler"、"Asynchronous Pluggable Protocols" などの名前で掲載されいる記事が多いようです。 (…情報を探すのに苦労したので参考になれば。。)

目次

概要

今回の目標は「webページ において、"note:sample.txt" のような URLリンク を クリック することで、メモ帳(notepad.exe)を起動する」です。

note: といった URLスキーム は本来存在しない スキーム なので、あらかじめ レジストリ に登録する必要があります。 インストーラー や バッチ 等であらかじめ設定すると良いと思います。 今回は ".reg" ファイル を用いて登録します。 サンプルコード は 末尾を参照してください。

…実際は近い動作までできますが、思うような動作はしません。 これは、URL が適切に解釈できないためです。 実際に利用する際は、URLを解釈して アプリ を キック する 小さなモジュール を作る必要があると思います。

レジストリ の 登録

以下に notepad.exe を note: で起動する場合の例を示します。 斜体文字の部分を任意に書き換えることで、独自の URLスキーム が実装できます。

HKEY_CLASSES_ROOT
  note
    (既定)="URL:Notepad Protocol"
    "URL Protocol"=""
    DefaultIcon
      (既定)="c:¥windows¥system32¥SHELL32.dll,3"
    shell
      open
        command
          (既定)="¥"c:¥windows¥notepad.exe¥" ¥"%1¥""

各キーや値について、以下で詳しく説明します。

[HKCR\note]
キー。カスタム URL スキーム を定義します。
[HKCR\note] @
既定。任意の文字列。
[HKCR\note] "URL Protocol"
文字列。必ず空文字列を指定します。
[HKCR\note\DefaultIcon] @
既定。アイコンを保存しているファイルとインデックスを指定します。"path,index"。 私には使途不明です…。指定しなくても動作しました。
[HKCR\note\shell\open\command] @
既定。起動するプログラムのパスと引数を指定します。引数は %1 。 実際に引き渡される文字列はブラウザに依存するようです。

カスタム URL スキーム の テスト

上記レジストリ登録がされている前提で、次に示す URL を呼び出してみます。

「起動してよいか」確認ダイアログが表示され、ここれで許可するとメモ帳が起動します。 起動したメモ帳は URL が正しく解釈できないので、エラーを表示します。

[おまけ] 警告の抑制

Internet Explorer

Internet Explorer において、警告を表示しないようにするためには、あらかじめレジストリに登録が必要になります。 必要な登録内容は以下の通りです。

HKEY_LOCAL_MACHINE
  SOFTWARE
    Microsoft
      Internet Explorer
        ProtocolExecute
          note
            "WarnOnOpen"=dword:00000000

[おまけ] サンプルコード

ここでは サンプルコード をまとめて掲載します。 掲載するのは以下の ファイル で、基本的には コピペ して使ってください。

  • sample.html (テスト用HTML)
  • regist.reg (レジストリ登録)
  • unregist.reg (レジストリ解除)

sample.html

<html>
<head>
    <title>Custom URL Sample Page</title>
</head>
<body>

<a href="note:sample.txt">ノートパッドを起動</a>

</body>
</html>

regist.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\note]
@="URL:Notepad Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\note\DefaultIcon]

[HKEY_CLASSES_ROOT\note\shell]

[HKEY_CLASSES_ROOT\note\shell\open]

[HKEY_CLASSES_ROOT\note\shell\open\command]
@="\"C:\\Windows\\notepad.exe\" \"%1\""

unregist.reg

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\note]

今回、以下のサイトを参考にしました。