AutoHotkeyでクリップNOTEを再現してみた

AutoHotkeyがめちゃくちゃ便利という話を聞き、今更インストールして使ってみたのが始まりだ。

簡単なコードを記述して、キー割り当てを変更したり、ショートカットキーを設定して作業の手間を省いたりすることができるソフトである。

導入から数時間、便利そうなコマンドを設定してみては「そんな便利じゃないな」と消したりして遊んでいたところ、ふと思い立つ。

「これでクリップNOTEを再現できるんじゃない?」

クリップNOTEとは、コピーした内容をストックしたり、改行ありの定型文を設定して、それらを簡単に呼び出せるソフトである。

以前会社員として働いていた際、事務作業において必要不可欠なツールとして重宝していたが、自宅のPCではうまく動かなかったのだ。

しかし、「AutoHotkey 便利」でGoogle検索した際にヒットした以下のページを見たとき、あの幻の便利ツールを再現できる可能性を感じた。

AutoHotKeyでクリップボードを自動バックアップする - プログラミングの「YUIPRO」 (yuis-programming.com)

使用したのは以下の部分。
これでクリップボードの文字列を自動でバックアップできる。

;バックアップ
~^c::

filename = C:\Users\\Dropbox\backup.txt ;任意のpath

ClipWait,1
sleep 20
FileAppend,
(
%clipboard%

), %filename%

Return

https://yuis-programming.com/?p=132


さっそく私は、クリップNOTEの再現に足りないパーツを探し始めた。

まず再現したかったのは、Shiftキー連打で上記のバックアップファイルを起動する機能だ。

そしてそれは、以下のページのおかげで無事実装できた。

AutoHotkey入門 学習シリーズ(17) 二度押しを使ってショートカットキーを増やす – ペーパークリップよ、君はどこだ (wordpress.com)

この時点で、すでに以下の便利機能が使えるようになっている。

  1. クリップボードの内容が自動でテキストファイルにバックアップされる

  2. Shiftキーを2回押すと、バックアップがメモ帳で開く

  3. 開いている状態でもう一度Shiftキーを2回押すと閉じる

クリップNOTEにあった最低限の機能は再現できただろう。

ただこのままでは、バックアップファイルがアクティブでない(最前面のウィンドウでない)ときにShiftキーを連打すると、さらにバックアップファイルを開いてしまうことになる。これでは便利とは言えない。

まだやれるはずだ。


次に私は、バックアップファイルがアクティブでないときはアクティブにし、起動していないときだけ新しく開くという機能を実装するため、Google検索を奔走した。

四苦八苦しながら、なんとか完成させたスクリプトがこれだ…!(先の引用含む)

;▼クリップボードの文字を自動バックアップする
~^c::

filename = C:\Users\■■■\Desktop\copy_backup.txt ;任意のpath

ClipWait,1
sleep 20
FileAppend, 
(
%clipboard%

), %filename%

Return


;▼Shift2回押しでクリップボード(copy_backup.txt)を開く
Shift::
	Keywait, Shift, D T0.2
	If (ErrorLevel=1)
	;▼直前のコマンド=Keywaitがタイムアウトで失敗=1であれば,
	{
	Send,{Shift}
	;普通にShiftを送る
	}
	else
	;▼2回押し成功の場合
	{
	
		if  ( WinActive("copy_backup.txt - メモ帳")  )
		;▼すでにアクティブの場合
		{
		;MsgBox, クリップボードを閉じます
		WinClose, copy_backup.txt - メモ帳
		;クリップボードを閉じる
		}
		else
		;▼アクティブでない場合
		{
			Process, Exist, notepad.exe
			;メモ帳が起動しているかどうかを調べる
			;MsgBox, ErrorLevel変数は%ErrorLevel%です
			If (ErrorLevel != 0)
			;▼起動している場合(ErrorLevel変数にプロセスIDが格納されている)
			{
			;MsgBox, クリップボードをアクティブにします
			WinActivate, copy_backup.txt - メモ帳
			;クリップボードをアクティブにする
			}
			else
			;▼起動していない場合
			{
			;MsgBox, 新たにクリップボードを開きます
			Run, "C:\Users\■■■\Desktop\copy_backup.txt"
			;新たにクリップボードを開く
			}
		}
	}
return

随所に見られるMsgBoxコマンドが、デバックの苦労を物語っている…。

実質十数行のごく短い内容だが、プログラミング初心者からすれば偉業を成し遂げたも同然の達成感がある。

なお、今回の最大のミスは「Process, Exist, 」の後のプロセス名を「copy_backup.txt - メモ帳」にしていたことだった。Processコマンドで参照するときはウィンドウ名ではなくアプリケーション名を指定するべきだと学んだ。


かくして、ツールの完成形は次の通りになった。

  1. クリップボードの内容が自動でテキストファイルにバックアップされる

  2. 開いている状態でもう一度Shiftキーを2回押すと閉じる

  3. Shiftキーを2回押すと、起動していないときだけバックアップがメモ帳で開く

  4. 起動しているがアクティブでないときはShiftキー2回押しでアクティブにする

これはもはや、クリップNOTEだ。あの(私のPCでは)失われた技術が今ここに蘇ったのである。

バックアップファイルの内容は下に積まれていくため、データが多くなると最新までスクロールするのが大変だとか、頻繁に手動でバックアップ内容を削除しなきゃならないとか、そんな些事は気にしない。

プライベートの利用だけなら、定型文を呼び出す必要もないため、私個人としては再現成功であるとの自己評価を下したい。


最後に、今回AutoHotkeyを知るきっかけとなった動画を紹介して、この備忘録を終わる。

Windowsで本当に有能なソフト5選 - ニコニコ動画 (nicovideo.jp)

良いソフトを教えてくださり、ありがとうございました。


追記(重要)

上記のコードでは他のメモ帳を開いているときにバックアップファイルを呼び出せないので、バックアップ先である「copy_backup.txt」を普段使わないリッチテキスト形式の「copy_backup.rtf」に変更し、これまた普段使わないワードパッドで開くようにした。

使う前に気づけよと自分自身に言いたくなるが、名称部分だけを変更すればいい簡単な修正だったのでよしとする。


追記2(超重要)

「Win + V」の存在を知った。


いいなと思ったら応援しよう!

高田馬場総本山
いただいたサポートは、記事制作のモチベーションアップに使わせていただきます。