目的
ブラウザからカスタムURLを叩いてwindows端末にインストールされているローカルアプリを引数付きで起動したい。
本稿では以下の例の実装方式を記載する。
例:ブラウザにnote:sample.txtをを入力するとメモ帳アプリが起動しsample.txtが開くようにする
方法
以下のtest.regを作成し、regeditの「ファイル」→「インポート」からインポート
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\note]
@="url:note protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\note\shell]
[HKEY_CLASSES_ROOT\note\shell\open]
[HKEY_CLASSES_ROOT\note\shell\open\command]
@="C:¥¥Windows¥¥System32¥¥cmd.exe /k set myvar=%1&call set myvar=%%myvar:note:=%%&call start notepad.exe %%myvar%%"
説明
ブラウザでnote:
と打ち込むと[HKEY_CLASSES_ROOT\note\shell\open\command]の欄に設定された命令が実行される。
なので単純にメモ帳を起動するだけなら
・・・
[HKEY_CLASSES_ROOT\note\shell\open\command]
@="C:¥¥Windows¥¥System32¥¥notepad.exe"
とかけば良い
プロトコル部分のnote:
以降のsample.txtを抽出して引数に渡したい場合が厄介で、以下の設定でURLスキーマを参照する事はできるのだが
・・・
[HKEY_CLASSES_ROOT\note\shell\open\command]
@="C:¥¥Windows¥¥System32¥¥notepad.exe %1"
regedit備え付けの引数%1
はURLスキーマ全体を渡すのでnote:sample.txtをブラウザに打ち込むと以下のような処理が実行され、note:sample.txtというファイルを開こうとしてしまう。
C:¥¥Windows¥¥System32¥¥notepad.exe note:sample.txt
なので以下の設定ではブラウザURLから直接notepadを起動するのをやめ、代わりにコマンドプロンプト(cmd.exe)を起動し、コマンドプロンプト内でmyvar
という変数に%1
の引数を渡して文字変換をした上でメモ帳(notepad.exe)起動をしている。
・・・
[HKEY_CLASSES_ROOT\note\shell\open\command]
@="C:¥¥Windows¥¥System32¥¥cmd.exe /k set myvar=%1&call set myvar=%%myvar:note:=%%&call start notepad.exe %%myvar%%"
%1
を引数にとって起動する記事はたくさんあったが、パラメータ部分のみ取得する記事はなかったので投稿、文字変換をもっと緻密に記載すればnote://sample.txt?parm1=aaa¶m2=bbb
みたいなURLにも対応できるが今はここまで
参考