Sleipnir2 以外のブラウザでも KeePass でのパスワードのみを簡単に入力が出来ないか考えてみた

休憩がてら

ここんとこずっと Splatoon ばっかりやってます。
で、今日は指が限界来たんでリフレッシュもかねて久しぶりのブログ投稿なんぞを。

2chパスワード管理ツール Part5スレより。

795 :名無しさん@お腹いっぱい。 [sage]:2015/06/09(火) 01:34:40.47 ID:40YyJzgc0
俺が欲しい機能はパスワードだけオートタイプしてくれるホットキー機能だわ
パスワードだけ入力する場面って結構多いんだけど自動でやれないからわざわざ手動でやってる だるい
これ実現するプラグインってないよね?

796 :名無しさん@お腹いっぱい。 [sage]:2015/06/09(火) 03:32:44.76 id:YPi3Sgpv0
だな
おせっかいにもIDだけは保存するサイトも割りとあるし

私もかつて同じように思い、メインのブラウザである Sleipnir2 ではどうにかする方法を編み出しました。
それについては過去エントリ最近の Sleipnir × KeePass 使用状況およびKeePass の利用方法で一月前と変わったところにて。
今回の手法も基本的に同じものなので同様の思いをしてる Sleipnir2 ユーザ以外は読む必要はありませんw

その過去エントリから抜粋……

パスワードボックスの前にダミーのテキストボックスを作って、互いを taabindex 属性で連番にして、ダミーのテキストボックスにフォーカスを当て自動入力を実行するという流れです。

では、方法を書いていきましょう。
なお、Firefox 38.0.5 と Google Chrome 43.0.2357.81 で確認しました。*1

ブックマークレットをショートカットキーで実行可能にする

それを可能にする拡張機能はいくつかあるんでしょうが、今回は Firefox では KeySnailChrome では Keyconfig を使用しました。

Firefox + KeySnail
1. 「設定ダイアログ」を開き「キーバインド」の「キーバインド」タブに移る。
2. 「追加(A)」ボタンを押し、「オリジナルのコマンド」を選択する。
3. 「モード」は「Edit」を選択し、「コマンド名」は分かるようにお好きなように、「キー」も好きにしていいんですが、敢えて他と被らない押しにくいものにすると良い。*2
4. 「関数」は次のような感じで良いでしょう。

function (ev, arg) {
	var d=window.content.document,ae=d.activeElement,ipt=d.createElement('input');
	ae.setAttribute('tabindex',256);
	ipt.id='dummy2keepass';
	ipt.type='text';
	ipt.style.width=0;
	ipt.setAttribute('tabindex',255);
	ae.parentNode.insertBefore(ipt,ae);
	d.getElementById('dummy2keepass').focus();
}

Chrome + Keyconfig
1. 「オプション」を開き「Actions」タブに移る。
2. 「type key here」とあるテキストフィールドにフォーカスし、好きなホットキーを入力して右隣の「Add」ボタンを押す。こちらの場合も敢えて他と被らない押しにくいものにすると良い。*3
3. 追加された項目の右側「アクションなし」ボタンを押しアクションリストの中から「ナビゲーション」グループの「go to #1」を選択する。
4. 「NAME」フィールドには適当に分かりやすい名前を、「URL」フィールドには以下のブックマークレットを入力してください。

javascript:(function(){var d=document,ae=d.activeElement,ipt=d.createElement('input');ae.setAttribute('tabindex',256);ipt.id='dummy2keepass';ipt.type='text';ipt.style.width=0;ipt.setAttribute('tabindex',255);ae.parentNode.insertBefore(ipt,ae);d.getElementById('dummy2keepass').focus();})();
AutoHotKey でホットキーを発行可能にする

と、その前に KeePass のグローバルホットキーを設定しておく必要があります。
KeePass の「メニュー」から「ツール(T)」-「オプション(O)...」で設定ダイアログを開き、「システム統合」タブに移り、「システム全体で有効なホットキー」の「グローバルオートタイプ」を設定/確認します。*4

AutoHotKey スクリプトの動作の流れは次のようになります。
1. AutoHotKey で指定のホットキー押下
2. ブックマークレットのホットキーの発行
3. 適度にスリープ
4. KeePass のグローバルオートタイプのホットキーの発行

ちなみに、今回の場合は KeePassWand 設定時の名残で「グローバルオートタイプ」は「Shift, Ctrl, Alt + A」(= Ctrl + Shift + Alt + A)になっています。
そして、今回のテスト時のブックマークレットのホットキーは「M - A」(= Shift + Alt + A)にしました。
また、AutoHotKey のホットキーはテスト用に空けてある「Win + Z」となっております。

というわけでテストで使用したスクリプトは以下。

/*
	+ ⇒ Shift
	^ ⇒ Ctrl
	! ⇒ Alt
	# ⇒ Win
*/
#z::
	Send, +!a
	Sleep, 1000
	Send, +^!a
return

いちいち ID 保存するタイプのサイトで試すのも面倒だったんで、適当なサイトのログインページで予めメアドを入力した後、パスワードのテキストフィールドにフォーカス当ててホットキー入力って感じで試しました。

飽くまでテストなんでこのままはお勧めしません。
例えばホットキーが空いてるならパスワードの頭文字の P で「Win + P」のが分かりやすいし、スリープ時間ももっと短くて良いし、「IfWinActive」も使ったほうが良いしってことで参考程度にした方が身のためだからそのままコピペしない方が良いです。
AutoHotKey スクリプトの書き方については AutoHotkey Wiki とかで学んでください。
まぁ、AHK では GUI も作れるので偉い人が GUI で設定できるもの書いてくれるのを期待するのもアリかなw

それと、ブックマークレットはキーストロークが「{USERNAME}{TAB}{PASSWORD}{ENTER}」の場合しか想定してないので、そこも注意。

最後に

シオカラーズではアオリ派です。
イカ、よろしくーーー!

*1:正確には両方とも PortableApps.com のポータブル版

*2:人の手では押さずに AHK がやるので

*3:人の手では押さずに AHK がやるので

*4:私は99% freeの日本語ファイル使ってますが、他の日本語ファイル使用の場合表記揺れがある可能性があります