今回は、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
1 2 3 4 5 6 7 8 9 10 | < html > < head > < title >Custom URL Sample Page</ title > </ head > < body > < a href = "note:sample.txt" >ノートパッドを起動</ a > </ body > </ html > |
regist.reg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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
1 2 3 | Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\note] |
今回、以下のサイトを参考にしました。
- MSDN - Registering an Application to a URL Protocol
- 学習B5デスノート - [Windows, C#]WindowsでURLスキームを使用して実行ファイルを呼び出す
- cicupoのC++日記 - [win] URL スキームを追加するには
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!