KeePass の利用方法で一月前と変わったところ

1ヶ月経って

前回の記事から変わったところが何点かありますので、ここに記しておきます。

日本語ファイルを変えた

halsinan.com さんとこのは 2.23 以降更新が無いので、99% free さんの配布している日本語ファイルに変えてみました。

新しく入れたプラグイン

研究不足で入らなかったものの、将来的にレギュラー入りの可能性があると書いたものから 2 つほど。
まずは、 KPEnhancedEntryView です。
詳しくは前回の記事の該当項目を読んでください。

もう一つは URL in Title Bar です。
前回の記事ではユーザスクリプトで使えばいいんじゃないか的なことを書いておりました。
で、実際試してみました。
使ったのは公式プラグインページの URL in Title Bar の欄にあるうちの
「Using KeePass with Opera (user JavaScript).」のものです。
残念ながら閉鎖されているみたいですが、Internet Archive で遡ると見ることができます。
Using KeePass with Opera - Jean-François Im
適当なスクリプトヘッダを書き加えてください。

ただし、正常に動くかは知りません。
Sleipnir 2 の SeaHorse の場合上手く動作しなかったので少し書き換えましたし、他のブラウザでは試してすらいないからですw

まぁ、そんなこんなで数日のあいだ試しで使っていたら、個人的に看過できない重大なデメリットに遭遇しました。
Twitter ボタンが置いてないページでは「ページタイトル + 半角スペース + URL」でツイートするアクションを作って使っていまして、その時付加部も含まれてしまうのでいちいち削る必要があるのです。
まぁ、それだけだったらツイートのアクション側変更するだけでも良かったんですが、
その他に個人的によくやる作業……例えばタイトルだけコピー、タイトルと URL のコピー、インターネットショートカットリンクを作るなどでも削る必要があったりして我慢の限界を超えたので常用するのを諦めました。

しかし、スクリプトの発想自体は気に入ったので UA スクリプトとして流用することにしました。
以下は Sleipnir 2 専用の話で、他のブラウザではまったく使えないです。
まず、新規にアクションを作ります。

URLinTitleBar.js

(function() {
	if(!document.title.match(/ \- \[\[.+\]\]$/)){
		document.title=document.title + ' - [[' + location.host + ']]';
	}
});

実際に使用してるものとは異なります。
実際使ってるのは元スクリプトに色々増築したユーザスクリプトをそのまま使ってるんだけど、そこから換骨奪胎したのが上記です。
多分、問題ないはず。

前々回の記事で作ったアクションの先頭でこのアクションを実行させればいいわけなんですが、上手く動きませんでした。
そこで、それらも少し弄ります。

まず、UA スクリプトのフォルダに 「Accessory」という名のフォルダを作成します。
次に AutoHotKey(AHK) スクリプトを作ります。
AHK 入れてない場合は別途入れてください。*1
なお、ほとんどコマンドライン引数を配列にまとめたうえで取得する関数 - blechmusikの日記からの流用です。

SendKeyStroke.ahk

; http://blechmusik.hatenablog.jp/entry/20120221/1329751285
get_command_argument(){
	global
	local arg_list := []
	
	Loop,100
	{
		if ("" != Trim(%A_Index%)){
			arg_list.insert(%A_Index%)
		}
	}
	
	return arg_list
}

for i, v in get_command_argument() {
	Send, %v%
	Sleep, 100
}

で、コンパイルして生成された「SendKeyStroke.exe」を先ほど作成した「Accessory」フォルダ内に移します。

UA スクリプトを 3 つ作成します。

KeePassGlobalAutoType.js

(function() {
	sleipnir.api.ExecuteAction("URLinTitleBar");
	var keystroke = "^+!a";
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var exe = fso.BuildPath(fso.BuildPath(ScriptFullName.slice(0, -ScriptName.length), "Accessory"), "SendKeyStroke.exe");
	var wshll = new ActiveXObject("WScript.shell");
	wshll.Run('\"' + exe + '\" \"' + keystroke + '\"');
	wshll.Quit;
})();

KeePassPasswordAutoType.js

(function() {
	sleipnir.api.ExecuteAction("URLinTitleBar");
	var d = document, ae = d.activeElement;
	ae.setAttribute("tabindex", 256);
	var ipt = d.createElement("input");
	ipt.id = "dummy2keepass";
	ipt.type = "text";
	ipt.setAttribute("style", "width: 0; height: 0; margin: 0; position: absolute; top: -1px; left: -1px;");
	ipt.setAttribute("tabindex", 255);
	ae.parentNode.insertBefore(ipt, ae);
	d.getElementById("dummy2keepass").focus();
	var keystroke = "^+!a";
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var exe = fso.BuildPath(fso.BuildPath(ScriptFullName.slice(0, -ScriptName.length), "Accessory"), "SendKeyStroke.exe");
	var wshll = new ActiveXObject("WScript.shell");
	wshll.Run('\"' + exe + '\" \"' + keystroke + '\"');
	wshll.Quit;
})();

KeePassShowWindow.js

(function() {
	var keystroke = "^+!k";
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var exe = fso.BuildPath(fso.BuildPath(ScriptFullName.slice(0, -ScriptName.length), "Accessory"), "SendKeyStroke.exe");
	var wshll = new ActiveXObject("WScript.shell");
	wshll.Run('\"' + exe + '\" \"' + keystroke + '\"');
	wshll.Quit;
})();

また、前々回編集した「BrwsCtxtMenuCtlAddPopup.xml」を再度編集します。

<?xml version="1.0"?>
<root>
	<folder name="ROOT" >
		<item name="KeePass - Show Window" action="KeePassShowWindow" />
		<item name="KeePass - Global Auto-Type" action="KeePassGlobalAutoType" />
		<item name="KeePass - Password Auto-Type" action="KeePassPasswordAutoType" />
	</folder>
</root>

これで、input および textarea でのコンテキストメニューからアクション実行して、その時だけタイトルにホスト名が付加され、直後に自動入力処理が行われるはずです。

*1:exe 配布しても良いんだけどうpするのかったるい